【转】ASP.NET MVC Autofac依赖注入

1.基本注入

首先我们要构造一个容器,代码如下:

//第一步: 构造一个AutoFac的builder容器
ContainerBuilder builder = new ContainerBuilder();

第二步..注入自己需要的服务和继承关系.  类似下面:

//注入仓储
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>)).InstancePerLifetimeScope();

嗯..这里解释一下是什么意思..

RegisterGeneric 注入你的服务类,后面的As则是你服务类继承的接口.

InstancePerLifetimeScope为你注入的这个服务的生命周期.(注:生命周期我们后面讲)

2.控制器注入

采用属性注入的方式,注入控制器

//注入控制控制器
builder.RegisterControllers(assemblys.ToArray()).PropertiesAutowired().InstancePerLifetimeScope();

嗯..这里面的assemblys.ToArray().. 就是一些你要注入到控制器里面的程序集..

嗯 我是直接通过统一接口 然后批量注入..你们自己随意..

PropertiesAutowired()的意思就是采用属性注入的方式

3.特性注入

我们在使用MVC的时候,肯定会用到特性..肯定会有一些自己定义的特性..那么这些特性里面要用到相关的服务,该怎么注入呢..如下:

//注入特性
 builder.RegisterFilterProvider();

是的.. 你没看错..MVC里面就一句话就行了..特性里面就可以取到想要的服务了..(注:WebAPI不可以,具体请查官方文档)

4.生成容器并提供给MVC

代码如下:

//通过容器配置生成容器. 
 var container = builder.Build();
 //提供给MVC
 DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

5.一些杂七杂八

//注入类用这个
builder.RegisterType(要注入的类型)
//注入泛型类用这个
builder.RegisterGeneric(要注入的类型)

6.关于生命周期

InstancePerDependency()

瞬时,嗯..就是服务对于每次请求都会返回单独的实例

InstancePerLifetimeScope()

基于线程或者请求的单例..嗯 就是一个请求 或者一个线程 共用一个

SingleInstance()

嗯..没别的 就是单例.. 整个项目公用一个

InstancePerRequest()

嗯..针对MVC的,或者说是ASP.NET的..每个请求单例

原文地址:https://www.cnblogs.com/ystao/p/8643607.html