如何在asp.net mvc 中使用Autofac 控制反转(Ioc)

前言

最近看了一些关于Ioc方面的开源项目,里面的类跳来转去,看的迷迷糊糊的。项目里根本不需要这么“复杂的”设计,只需简单完成Ico,达到解耦的目的,并且能高效的完成项目。于是参考autofac的官网及网络资源,写了这篇文章。

入门的坑

在网上很多关于mvc使用autofac的文章,在global.cs中大多都会有这么一句代码:

builder.RegisterControllers

一开始,自己仅是通过nuget引用了autofac,所以怎么也敲不出这个。因此,新入门的小伙半一定要同时引入这两个:

1、Autofac

2、Autofac.mvc5

PS: 这里要注意的是:有很多个版本autofac.mvc,如果安装的版本不对,有可能出现这样的错误:

Autofac.Integration.Mvc.AutofacDependencyResolver.GetService(System.Type)”时违反了继承安全性规则

这是因为net版本和autofac.mvc版本不兼容导致的。在此demo源码中使用的net4.5.2。

关键代码

 1 public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7             RouteConfig.RegisterRoutes(RouteTable.Routes);
 8             BundleConfig.RegisterBundles(BundleTable.Bundles);
 9 
10             //配置autofac
11             var builder = new ContainerBuilder();
12             SetupResolveRules(builder);
13             builder.RegisterControllers(typeof(MvcApplication).Assembly);
14             var container = builder.Build();
15             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
16         }
17         private void SetupResolveRules(ContainerBuilder builder)
18         {
19             builder.RegisterType<StudentRepository>().As<IStudentRepository>();
20         }
21     }
View Code

homecontroller 中使用

1 readonly IStudentRepository _studentRepository;
2         public HomeController(IStudentRepository studentRespository) {
3             _studentRepository = studentRespository;
4         }
5         public string Index()
6         {
7             return _studentRepository.SayHello();
8         }

源码下载

密码:fj24

希望这篇文章能帮助到大家。谢谢

  

原文地址:https://www.cnblogs.com/liangxiarong/p/8612198.html