Asp.Net Mvc使用Autofac实现依赖注入

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

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

api

    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以下:mvc

一、在App_Start建立类文件AutofacConfig.cs框架

引用asp.net

using Autofac;
using Autofac.Integration.Mvc;

如下为逐个注册方法:ide

            //建立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));
        }
    }

 

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

 

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

 

三、Web Api配置Autofac方法spa

引用

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);
相关文章
相关标签/搜索