netcore使用Autofac实现依赖注入

原文: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);
        }

原文地址:https://www.cnblogs.com/lonelyxmas/p/12549282.html

时间: 2024-08-27 15:11:19

netcore使用Autofac实现依赖注入的相关文章

NET Core源代码通过Autofac实现依赖注入

查看.NET Core源代码通过Autofac实现依赖注入到Controller属性 阅读目录 一.前言 二.使用Autofac 三.最后 回到目录 一.前言 在之前的文章[ASP.NET Core 整合Autofac和Castle实现自动AOP拦截]中,我们讲过除了ASP.NETCore自带的IOC容器外,如何使用Autofac来接管IServiceProvider进行依赖注入. 最近老有想法在ASP.NET Mvc Core中实现Controller的属性值的依赖注入,但是找遍了Micros

NopCommerce使用Autofac实现依赖注入

NopCommerce的依赖注入是用的AutoFac组件,这个组件在nuget可以获取,而IOC反转控制常见的实现手段之一就是DI依赖注入,而依赖注入的方式通常有:接口注入.Setter注入和构造函数注入. NopCommerce将所有和Autofac注入相关的工作都放到了EngineContext中,在Global.asax的Application_Start函数的第一句代码即是: //initialize engine context EngineContext.Initialize(fal

【AutoFac】依赖注入和控制反转的使用

在开始之前首先解释一下我认为的依赖注入和控制反转的意思.(新手理解,哪里说得不正确还请指正和见谅) 控制反转:我们向IOC容器发出获取一个对象实例的一个请求,IOC容器便把这个对象实例“注入”到我们的手中,在这个时候我们不是一个创建者,我们是以一个请求者的身份去请求容器给我们这个对象实例.我们所有的对象依赖于容器提供给你的资源,控制权落到了容器身上.在这里的身份转化或许就是控制反转的核心吧. 依赖注入:我们向容器发出请求以后,获得这个对象实例的过程就叫依赖注入.也就是我们在使用对向前我们都需要先

使用AutoFac实现依赖注入(封装一个注册类)

1 public class AutoFacBootStrapper 2 { 3 public static void CoreAutoFacInit() 4 { 5 var builder = new ContainerBuilder(); 6 HttpConfiguration config = GlobalConfiguration.Configuration; 7 SetupResolveRules(builder); 8 //注册所有的Controllers,// 通过Properti

【MVC5】使用Autofac实现依赖注入

1.安装Autofac 在Package Manager Console执行如下命令: Install-Package AutofacInstall-Package Autofac.Mvc5 2.追加Model(Models.Movie) using System.Data.Entity; namespace FirstDenpendencyInjection.Models { public class Movie { public int Id { get; set; } public str

使用AutoFac实现依赖注入

1 Install-Package Autofac 2 3 Install-Package Autofac.Mvc5 -Version 4.0.2 原文地址:https://www.cnblogs.com/imstrive/p/9559544.html

AutoFac实现程序集级别的依赖注入

1.介绍 所谓程序集级别的依赖注入是指接口和实现的依赖不使用配置文件或硬代码实现(builder.RegisterType<UserInfoService>().As<IUserInfoService>();),而是通过名称约定实现依赖注入 2.项目接口及dll 2.1 项目结构(创建MVC3项目) 2.2 UI层需引入的dll(使用nuget引入) 2.2.1 Autofac 2.2.2 Autofac.Integration.Mvc 2.2.3 MyMVC3.Business.

ASP.NET MVC IOC依赖注入之Autofac系列(二)- WebForm当中应用

上一章主要介绍了Autofac在MVC当中的具体应用,本章将继续简单的介绍下Autofac在普通的WebForm当中的使用. PS:目前本人还不知道WebForm页面的构造函数要如何注入,以下在WebForm页面将主要采用属性注入的方式. 接下来我们正式进入主题,在上一章的基础上我们再添加一个web项目TianYa.DotNetShare.WebDemo,首先看我们的解决方案 本demo的web项目为ASP.NET Web 应用程序(.NET Framework 4.5) 空Web窗体,需要引用

ASP.NET Core-ActionFilter实现依赖注入(ServiceFilterAttribute 、TypeFilterAttribute) 【转】

一.简介 前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或抽象工厂来扩展功能,就如IControllerActivator这样的功能点在上篇文章(查看.NET Core源代码通过Autofac实现依赖注入到Controller属性)中也提到了,今天我们主要介绍一个大类似的扩展点,ASP.NET Core MVC中为我们提供了新的机制为Action Filt