在DoNetMVC中使用控制反转和依赖注入【DI】

本次是在MVC5中使用Autofac

第一步:程序包管理器控制台 Install-Package Autofac.MVC5 引入nuget包

这样成功之后,会在引用中出现两个DLL,分别是Autofac.dall Autofac.Integration.Mvc.dll

第二步:配置Autofac,并初始化

  代码如下:

 1 public class AutofacConfig
 2     {
 3         /// <summary>
 4         /// 初始化
 5         /// </summary>
 6         public static void Initialise()
 7         {
 8             //实例化一个autofac的创建容器
 9             var builder = new ContainerBuilder();
10             //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集
11             Assembly controllerAss = Assembly.Load("****");
12             builder.RegisterControllers(controllerAss);
13 
14             //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例
15             Assembly respAss = Assembly.Load("DataP");
16             //创建respAss中的所有类的instance以此类的实现接口存储
17             builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces();
18 
19             //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例
20             Assembly serpAss = Assembly.Load("DataM");
21             //创建serAss中的所有类的instance以此类的实现接口存储
22             builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces();
23 
24             // builder.RegisterType<>().As<>();
25 
26             //创建一个Autofac的容器
27             var container = builder.Build();
28             //将MVC的控制器对象实例 交由autofac来创建
29             DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
30 
31         }
32

第三步:实现注入启动

AutofacConfig.Initialise();

 1 public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6             RouteConfig.RegisterRoutes(RouteTable.Routes);
 7        //
10             AutofacConfig.Initialise();
11         }
12         
13     }

第四步:在控制器中使用

1  public class businessController : Controller
2     {
3         // GET: business
4         private IBusinessService _businessService;
5         public businessController(IBusinessService service)
6         {
7             this._businessService = service;
8         }
原文地址:https://www.cnblogs.com/KenFine/p/10499458.html