• netcore使用Autofac实现依赖注入


    第一步,添加程序集引用

    在nuget中搜索“autofac”,添加下图中的两个程序集。他们的作用分别是autofac的核心库和依赖倒置的实现库。

     第二步,注册服务

      修改Startup类的ConfigureServices方法

    public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                
                services.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
                //1、实例一个容器
                ContainerBuilder containerBuilder = new ContainerBuilder();
                //2、接管系统内置服务(service默认的注册服务,还需要处理控制器实例相关的工作)
                containerBuilder.Populate(services);
                //3、注册服务之类型注册
                containerBuilder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();
                //4、装载到容器
                var iContainer  = containerBuilder.Build();
                //5、返回
                return  new AutofacServiceProvider(iContainer);
            }

    第三步 使用

     public class CustomController : Controller
        {
    
            private IUserService _userService = null;
            /// <summary>
            /// 6、使用构造函数注入
            /// </summary>
            /// <param name="userService"></param>
            public CustomController(IUserService userService)
            {
                this._userService = userService;
            }
            public IActionResult Index()
            {
                //7、调用服务方法
                var userShowRel = _userService.Show();
                return Content($"{userShowRel}成功");
            }
        }

    扩展:除了类型注册还支持按模块注册

    在之前的基础上继续修改,首先添加一个继承自Module的类

     /// <summary>
        /// AutoFac依赖倒置注册模块
        /// </summary>
        public class CustomAutoFacModule: Autofac.Module
        {
           /// <summary>
           /// 重写父类的Load方法
           /// </summary>
           /// <param name="builder"></param>
            protected override void Load(ContainerBuilder builder)
            {
                builder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();//感叹,这语法,真的是不能再爽了
                //后面可以注册好多类型……
                //后面可以注册好多类型……
                //后面可以注册好多类型……
                //后面可以注册好多类型……
            }
        }

    然后,修改注册方法

    public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                
                services.Configure<CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
                //1、实例一个容器
                ContainerBuilder containerBuilder = new ContainerBuilder();
                //2、接管系统内置服务(service默认的注册服务,还需要处理控制器实例相关的工作)
                containerBuilder.Populate(services);
                //3、注册服务之类型注册
                //containerBuilder.RegisterType<UserProvider>().As<IUserService>().SingleInstance();
                //3、注册服务之模块注册
                containerBuilder.RegisterModule<Utility.CustomAutoFacModule>();
                //4、装载到容器
                var iContainer  = containerBuilder.Build();
                //5、返回
                return  new AutofacServiceProvider(iContainer);
            }
  • 相关阅读:
    时空上下文视觉跟踪(STC)算法的解读与代码复现(转)
    神经网络:卷积神经网络(转)
    图像卷积与滤波的一些知识点(转)
    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
    深度学习(卷积神经网络)一些问题总结(转)
    卷积神经网络的初步理解LeNet-5(转)
    中期总结
    转载:通俗理解遗传算法
    转载:协方差与协方差矩阵
    装载:关于拉格朗日乘子法与KKT条件
  • 原文地址:https://www.cnblogs.com/chenxizhaolu/p/12441863.html
Copyright © 2020-2023  润新知