码迷,mamicode.com
首页 > Web开发 > 详细

AutoFac在MVC中的使用

时间:2018-11-12 14:47:29      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:containe   sse   .config   prot   tpc   对象   webapi   home   tor   

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

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

  public IUserService _IUserService;

        public HomeController(IUserService IUserService)
        {
            _IUserService = IUserService;
        }

如何使用AutoFac如下:

1、首先引用AutoFac包

技术分享图片

 

技术分享图片

 同时也要看一下你的EF版本是多少的,否则会报无法加载“EntityFromwork” 之类的错误

技术分享图片

如果是EF是6.0那么还需要引用一个文件,如下:

技术分享图片

如果是其他版本的相应的引用AutoFac.MVC3、AutoFac.MVC4

 

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

引用命名空间:

using Autofac;
using Autofac.Integration.Mvc;

以下为单个注册方法:

//创建autofac管理注册类的容器实例
  var builder = new ContainerBuilder();
//下面就需要为这个容器注册它可以管理的类型
//builder的Register方法可以通过多种方式注册类型,之前在控制台程序里面也演示了好几种方式了。
  builder.RegisterType<UserService>().As<IUserService>();

//builder.RegisterType<DefaultController>().InstancePerDependency();
//使用Autofac提供的RegisterControllers扩展方法来对程序集中所有的Controller一次性的完成注册
  builder.RegisterControllers(Assembly.GetExecutingAssembly());
//生成具体的实例 var container = builder.Build(); //下面就是使用MVC的扩展 更改了MVC中的注入方式. DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

以下为批量注册方法:

namespace AutoFacConfigure.App_Start
{
    public class AutofacConfig
    {
        /// <summary>
        /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
        /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作
        /// </summary>
        public static void Register()
        {
            //实例化一个autofac的创建容器
            var builder = new ContainerBuilder();
            //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (WebUI)
            Assembly controllerAss = Assembly.Load("AutoFacConfigure");
            builder.RegisterControllers(controllerAss);

            //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例(数据操作层)
            Assembly respAss = Assembly.Load("AutoFacConfigure.Respoisty");
            //创建respAss中的所有类的instance以此类的实现接口存储
            builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces();

            //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例(业务逻辑层)
            Assembly serpAss = Assembly.Load("AutoFacConfigure.Service");
            //创建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);

 

AutoFac在MVC中的使用

标签:containe   sse   .config   prot   tpc   对象   webapi   home   tor   

原文地址:https://www.cnblogs.com/youmingkuang/p/9946113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!