• AutoFac在MVC中的使用


    在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);
  • 相关阅读:
    canvas绘图详解-10-文字渲染
    canvas绘图详解-09-曲线的绘制原理
    websocket,vue链接
    JS 数组对象根据某一相同key合并成新的数组
    nuxt $axios访问多个服务器地址请求数据
    正则去除字符串中的html标签,但不去除<br>标签
    css多行文本溢出显示省略号(兼容ie)
    input accept
    jquery.toast
    jquery toast
  • 原文地址:https://www.cnblogs.com/youmingkuang/p/9946113.html
Copyright © 2020-2023  润新知