autofac依赖注入MVC5和webapi2

时间:2014-11-27 18:00:33   收藏:0   阅读:4186

终于把丢了好久的MVC捡起来,虽然有些许印象,但是还需要重新学习。

 

很多书本中都提到依赖注入,控制反转等概念,这些都是为了实现松耦合层、组件和类目的。

常见的是使用Repository类分离Controller和Model的直接联系。而为了解除Repository类和Controller的紧密联系,通常不是直接定义Repository类并实例化,而是通过Controller的构造方法注入指定的Repository.

bubuko.com,布布扣

 1 public class ValuesController : ApiController
 2 {
 3 
 4         private IOneServices _oneServices;
 5 
 6         public ValuesController(IOneServices oneServices)
 7         
 8         {
 9             _oneServices = oneServices;
10 
11         }
12      //..........
13 }

 

流行的IoC容器有:Ninject,Autofac,Unity.

现就Autofac注入MVC5和Webapi2的使用方法做出简要讲解。

1、使用nupkg引用Autofac,Autofac.Mvc5和Autofac.Webapi2

PM> install-package autofac -version 3.5.0

PM> install-package autofac.mvc5

PM> install-package autofac.webapi2 (注意:您的项目中如果使用的是webapi2,此处必须为webapi2而不是webapi,否则在运行时将出现“重写成员“Autofac.Integration.WebApi.AutofacWebApiDependencyResolver.BeginScope()”时违反了继承安全性规则。重写方法的安全可访问性必须与所重写方法的安全可访问性匹配。”错误。)

bubuko.com,布布扣

 

 

2.注册组件.

var builder=new ContainerBuilder();

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());//注册api容器的实现

builder.RegisterControllers(Assembly.GetExecutingAssembly());//注册mvc容器的实现


builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())//查找程序集中以services结尾的类型
.Where(t => t.Name.EndsWith("Services"))
.AsImplementedInterfaces();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())//查找程序集中以Repository结尾的类型
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces();

 

3.创建一个Container以备后用.

var container=builder.Build();

 

4.从Container创建一个 lifetime scope .

5.使用这个Lifetime Scope 来解析组件的实例.

config.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册api容器需要使用HttpConfiguration对象
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注册MVC容器

6.在WebApiConfig类的Register方法中,调用上述步骤代码,并传入HttpConfiguration对象。

 

autofac的优点是可一次性解除耦合,而不需要配置;autofac更好的实现了MVC中“约定大于配置”的概念。

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!