zoukankan      html  css  js  c++  java
  • Asp.Net Mvc使用Autofac实现依赖注入

    在asp.net mvc控制器中使用Autofac来解析依赖

    如下Controller中使用构造函数依赖注入接口IPeople 

        public class AutoFacController : Controller
        {
            public IPeople _people;
    
            public AutoFacController(IPeople people)
            {
                _people = people;
            }
            // GET: AutoFac
            public ActionResult Index()
            {
                ViewBag.test = _people.Getpeople();
                return View();
            }
        }

     如何使用AutoFac如下:

    1、在App_Start创建类文件AutofacConfig.cs

    引用

    using Autofac;
    using Autofac.Integration.Mvc;

    以下为逐个注册方法:

                //创建autofac管理注册类的容器实例
                var builder = new ContainerBuilder();
                //下面就需要为这个容器注册它可以管理的类型
                //builder的Register方法可以通过多种方式注册类型,之前在控制台程序里面也演示了好几种方式了。
                builder.RegisterType<People>().As<IPeople>();
    
                //builder.RegisterType<DefaultController>().InstancePerDependency();
                //使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
                builder.RegisterControllers(Assembly.GetExecutingAssembly());
                //生成具体的实例
                var container = builder.Build();
                //下面就是使用MVC的扩展 更改了MVC中的注入方式.
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

    以下为批量注册方法:

        public class AutofacConfig
        {
            /// <summary>
            /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
            /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作
            /// </summary>
            public static void Register()
            {
                //实例化一个autofac的创建容器
                var builder = new ContainerBuilder();
                //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (Wchl.CRM.WebUI)
                Assembly controllerAss = Assembly.Load("Wchl.WMBlog.WebUI");
                builder.RegisterControllers(controllerAss);
    
                //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例
                Assembly respAss = Assembly.Load("Wchl.WMBlog.Repository");
                //创建respAss中的所有类的instance以此类的实现接口存储
                builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces();
    
                //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例
                Assembly serpAss = Assembly.Load("Wchl.WMBlog.Services");
                //创建serAss中的所有类的instance以此类的实现接口存储
                builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces();
    
                // builder.RegisterType<>().As<>();
    
                //创建一个Autofac的容器
                var container = builder.Build();
                //将MVC的控制器对象实例 交由autofac来创建
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            }
        }

    2、在全局Global.asax类Application_Start()方法中调用AutofacConfig配置类方法

            protected void Application_Start(object sender, EventArgs e)
            {
                AutofacConfig.Register();
            }

    3、Web Api配置Autofac方法

    引用

    using Autofac.Integration.WebApi;

    参考资料:http://docs.autofac.org/en/latest/integration/webapi.html

      var builder = new ContainerBuilder();
    
      // Get your HttpConfiguration.
      var config = GlobalConfiguration.Configuration;
    
      // Register your Web API controllers.
      builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
    
      // OPTIONAL: Register the Autofac filter provider.
      builder.RegisterWebApiFilterProvider(config);
    
      // Set the dependency resolver to be Autofac.
      var container = builder.Build();
      config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
  • 相关阅读:
    线段树 建树 单点修改 单点/区间查询
    JAVAEE学期总结
    Spring框架教程IDEA版-----更新中
    第一章操作系统引论-------批处理、分时、实时各个操作系统特点 进程与线程的区别
    读《阿法狗围棋系统的简要分析》
    matlab启动后的默认路径
    从长辈们的故事谈起
    在成为一名老司机的路上不要狂奔
    物理学与其它科学的关系
    读《现象级带货网红的自我修养》
  • 原文地址:https://www.cnblogs.com/eedc/p/6127181.html
Copyright © 2011-2022 走看看