netcore 2.2 使用 Autofac 实现自动注入

Autofac自动注入是通过名称约定来实现依赖注入

ps:本demo接口层都以“I”开头,以“Service”结尾。服务层实现都以“Service”结尾。

为什么要实现自动注入

大多时候,我们都是 以下方式进行依赖注入

        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            //初始化容器
            var builder = new ContainerBuilder();
            //管道寄居
            builder.Populate(services);
            builder.RegisterType<TestService>().As<ITestService>();//UserService注入到IUserService
            //构造
            ApplicationContainer = builder.Build();
            //将AutoFac反馈到管道中
            return new AutofacServiceProvider(ApplicationContainer);
        }

随着业务的增长,接口跟实现类会越来越多,还需要手动一个个的注册依赖项,有时候会出现忘了写配置,导致程序报错,如果是多人开发,可能还会导致代码冲突,后期维护起来相对来说比较麻烦。

实用Autofac自动注入

        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            //初始化容器
            var builder = new ContainerBuilder();
            //管道寄居
            builder.Populate(services);
            //业务逻辑层所在程序集命名空间
            Assembly service = Assembly.Load("NetCoreDemo.Service");
            //接口层所在程序集命名空间
            Assembly repository = Assembly.Load("NetCoreDemo.Repository");
            //自动注入
            builder.RegisterAssemblyTypes(service, repository)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces();
            //构造
            ApplicationContainer = builder.Build();
            //将AutoFac反馈到管道中
            return new AutofacServiceProvider(ApplicationContainer);
        }

简单测试

创建IUserService接口

    public interface ITestService
    {
        string Hello();
    }

创建UserService实现类

    public class TestService : ITestService
    {
        public string Hello()
        {
            return "Hello Word";
        }
    }

创建TestController控制器

通过控制器的构造方法注入ITestService接口

    [Route("api/test")]
    [ApiController]
    public class TestController : Controller
    {
        private readonly ITestService _testService;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="testService"></param>
        public TestController(ITestService testService)
        {
            _testService = testService;
        }
        [HttpGet]
        public string Hello()
        {
           var str= _testService.Hello();
           return str;
        }
    }

运行

原文地址:https://www.cnblogs.com/tenghao510/p/11959322.html

时间: 2024-11-11 20:32:41

netcore 2.2 使用 Autofac 实现自动注入的相关文章

[原创]Aop之使用Autofac+Castle 自动注入服务且动态代理服务实现拦截

public static class AutofacComponentManualRegister { /// <summary> /// 注册 /// </summary> /// <param name="builder">bundles</param> public static IContainer RegisterIOC() { ContainerBuilder builder = new ContainerBuilder()

解决Autofac MVC 自动注入在 Areas拆分到不同dll下的注入失败问题走奏谞踪昨兹

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

ASP.NET MVC Autofac自动注入

依赖注入容器有很多插件,我用过Unity和Autofac,这两个插件给我最明显的感觉就是Autofac很快,非常的快,毕竟是第三方开发的,而Unity相对而言性能比较稳定 下面附上Autofac自动注入代码:(IDependency接口表示要注入的接口必须要继承它,WEB中必须要添加接口类库和接口实现类库,否则会注入失败),其实原理就是反射 using System.Linq; using System.Reflection; using System.Web.Compilation; usin

netcore使用Autofac实现依赖注入

原文:netcore使用Autofac实现依赖注入 第一步,添加程序集引用 在nuget中搜索"autofac",添加下图中的两个程序集.他们的作用分别是autofac的核心库和依赖倒置的实现库. 第二步,注册服务 修改Startup类的ConfigureServices方法 public IServiceProvider ConfigureServices(IServiceCollection services) { services.Configure<CookiePolic

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

Autofac 的属性注入,IOC的坑

Autofac 是一款优秀的IOC的开源工具,完美的适配.Net特性,但是有时候我们想通过属性注入的方式来获取我们注入的对象,对不起,有时候你还真是获取不到,这因为什么呢? 1.你对Autofac 不太了解,在这个浮躁的社会,没有人会认真的了解每个开源项目,只要求能用就行 2.没有时间了解,你是一个很忙的人,工作很忙,应酬很忙 3.刚开始使用Autofac 还没来得及深入了解就要做项目. 不管是什么原因,总之我们注入的属性就是无法直接由autofac 自动注入,或者说我们希望由Autofac自动

NopCommerce使用Autofac实现依赖注入

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

使用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

关于springboot项目中自动注入,但是用的时候值为空的BUG

最近想做一些web项目来填充下业余时间,首先想到了使用springboot框架,毕竟方便 快捷 首先:去这里 http://start.spring.io/ 直接构建了一个springboot初始化的项目框架 然后:在页面上选择相应的依赖包,然后点击构建按钮,然后下载并且导入IDE中,目前喜欢使用IDEA 于是一个简答的springboot项目就搭建好了 废话说完,然后想体验下spring中redis的使用: 那就直接新建了一个类,然后 @Autowired 自动注入 RedisTemplate