ASP.NET MVC IOC 之 Autofac(二)
在上一章节,我们已经知道了再控制器中如何注入以及使用了。这一章,我们重点讲解下,如何在服务层中使用。
我们新定义一个教师类,在服务层中,通过这个教师类服务层,获取学生的年龄。实现在教师类的服务层中调用了学生类的服务接口对象。
新建一个教师类接口:ITeacherService.cs
namespace AutoFacTest.Service
{
public interface ITeacherService
{
int GetStudentAge(string name); }
}
接着定义一个 教师实现类,TeacherService.cs
public class TeacherService:ITeacherService
{
/// <summary>
/// 定义学生接口服务类
/// </summary>
private readonly IStudentService _stu; /// <summary>
/// 实现构造函数注入
/// </summary>
/// <param name="stu"></param>
public TeacherService(IStudentService stu)
{
_stu = stu;
} /// <summary>
/// 调用学生类,获取学生信息
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public int GetStudentAge(string name)
{
return _stu.GetStudentAge(name);
} }
从上面的代码,我们可以看到我们在TeacherService的构造函数中已经实现了学生抽象类的注入。通过下一步在全局注入即可完成实例化。
下一步,在global中,新增教师类的注入
private void AutoFacRegister()
{
var builder = new ContainerBuilder();
//注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
// builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
/*接口实现*/
builder.RegisterType<StudentService>().As<IStudentService>();
builder.RegisterType<TeacherService>().As<ITeacherService>();
//设置依赖解析器
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
以上,我们就做好准备了。
下一步,界面显示
public class HomeController : Controller
{
public IStudentService Stu { get; set; } //定义全局的学生抽象类对象
public ITeacherService Teac { get; set; }
/// <summary>
/// 通过构造函数进行注入,注意,参数是抽象类,非实现类。因为已经在global中将实现类映射给了抽象类
/// </summary>
// GET: Home
public void Index()
{
Response.Write("学生类:"+ Stu.GetStudentAge("张三")+"<br />");
Response.Write("教师类:"+Teac.GetStudentAge("张三")+"<br />");
}
}
然后浏览网页看结果:
已经实现了在服务层中的调用学生抽象类。这说明了一个点,autofac的注入是全局。
大家可能会发现在我们的global文件中,所有服务层的类都需要一个个注册,那如果很多类的话,那可写老长了。
autofac还提供的其他类型注入,下面就介绍我们的解决办法。
定义一个公共空接口 IDependency,所有实现类都集成这个接口。
namespace AutoFacTest.Service
{
/// <summary>
/// 空接口对象,用于一次性注入
/// </summary>
public interface IDependency
{
}
}
然后 学生类,和教师类都继承
public class TeacherService:ITeacherService, IDependency
public class StudentService:IStudentService, IDependency
在global中,换个方式进行注入
private void AutoFacRegister()
{
var builder = new ContainerBuilder();
//注册MVC控制器(注册所有到控制器,控制器注入,就是需要在控制器的构造函数中接收对象)
// builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterControllers(typeof (MvcApplication).Assembly).PropertiesAutowired();
/*接口实现*/
// builder.RegisterType<StudentService>().As<IStudentService>();
// builder.RegisterType<TeacherService>().As<ITeacherService>(); //注册所有实现了 IDependency 接口的类型
Type baseType = typeof(IDependency);
Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll").Select(Assembly.LoadFrom).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
.AsSelf().AsImplementedInterfaces()
.PropertiesAutowired().InstancePerLifetimeScope();
//设置依赖解析器
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
ASP.NET MVC IOC 之 Autofac(二)的更多相关文章
- ASP.NET MVC IOC 之AutoFac
ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...
- [转]ASP.NET MVC IOC 之AutoFac攻略
本文转自:http://www.cnblogs.com/WeiGe/p/3871451.html 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用A ...
- ASP.NET MVC IOC 之AutoFac攻略
一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofa ...
- ASP.NET MVC IOC 之 Autofac 系列开篇
本系列主要讲述Autofac在.NET MVC项目以及webform中的使用. autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 作为初学者,将学习到的每一步, ...
- ASP.NET MVC IOC 之 Autofac(一)
新建一个MVC项目,如 AutoFacTest,引用autofac,如下图: 接下来就是开始进行编程了 首先,新建一个类库,名为 AutoFacTest.Service,该类库编写服务层代码,我们的接 ...
- ASP.NET MVC IOC 之 Autofac(三)-webform中应用
在webform中应用autofac,只有global中的写法不一样,其他使用方式都一样 nuget上引用: global中的写法: private void AutoFacRegister() { ...
- ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用
上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在Web ...
- Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac
经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...
- ASP.NET MVC IOC 之Ninject攻略
ASP.NET MVC IOC 之Ninject攻略 一.为什么要使用Ninject? 很多其它类型的IOC容器过于依赖配置文件,老是配置,总感觉有点不爽,而且要使用assembly-qualifie ...
随机推荐
- Android APP之WebView如何校验SSL证书
Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点. ...
- Python列表操作与深浅拷贝(6)——列表索引、查询、修改、扩展
列表list定义 L1 = [] L2 = [1,2,'abc'] L3 = list() L4 = list(range(5)) L5 = [1,'abc',True,None,[4,5,'abc' ...
- appium---app输入中文
在app自动化的过程中,都会遇到输入中文的问题,今天总结下app自动化如何输入中文 app输入中文 在启动app的时候在参数里面添加unicodeKeyboard和resetKeyboard后,运行代 ...
- glog的编译和使用
glog是google提供的一个轻量级日志库,有chromium开发经验的人都会发现,它和base库中的日志库非常像,其实base库中的日志库比它更加轻量级.glog在日常开发中的使用非常广泛.这里介 ...
- node知识
node中的url url中的方法: parse,resolve,format: 方法parse: 例子:url.parse('http://imooc.com/course/list'); 结果:{ ...
- 初识V4L2(一)
V4L2驱动框架概述 V4L2(video for linux two)是linux为视频设备提供的一套标准接口.它也属于字符设备驱动程序. 首先回顾普通字符设备驱动程序的写法: app : ...
- MySQL内连接、左连接、右连接的使用以及区别
首先先建两个表,student表和score表 select * from student; student表数据如下: select * from score; score表数据如下: 可以看 ...
- loadrunner12 Runtime Settings位置
- A1050 String Subtraction (20 分)
一.技术总结 这个是使用了一个bool类型的数组来判断该字符是否应该被输出. 然后就是如果在str2中出现那么就判断为false,被消除不被输出. 遍历str1如果字符位true则输出该字符. 还有需 ...
- [LeetCode] 916. Word Subsets 单词子集合
We are given two arrays A and B of words. Each word is a string of lowercase letters. Now, say that ...