安装Autofac.Extensions.DependencyInjection包

在programe.cs下

        public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args)//改用Autofac来实现依赖注入.UseServiceProviderFactory(new AutofacServiceProviderFactory()).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});

主要是这句代码

//改用Autofac来实现依赖注入
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())

在StartUp中增加

        //autofac 新增public void ConfigureContainer(ContainerBuilder builder){//直接用Autofac注册我们自定义的//builder.RegisterType<UserService>().As<IUserService>().InstancePerLifetimeScope().AsImplementedInterfaces();builder.RegisterModule(new AutofacConfig());}

我的AutofacConfig类如下

public class AutofacConfig : Autofac.Module {protected override void Load(ContainerBuilder builder) {//base.Load(builder);//重写Autofac管道中的Load方法,在这里注入注册的内容//builder.RegisterType<ServiceA>().As<IServiceA>().InstancePerLifetimeScope();//以程序集形式注册//获取以My开头的dll程序集的集合利用Directory.GetFiles获取dll,利用Assembly.LoadFrom委托select来对刚才的每个dll文件进行获取集合Assembly[] assemblies = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "My*.dll").Select(Assembly.LoadFrom).ToArray();//注册所有实现了 IDependency 接口的类型Type baseType = typeof(IDependency);builder.RegisterAssemblyTypes(assemblies).Where(b => !b.IsAbstract && baseType.IsAssignableFrom(b))//IsAssignableFrom是否实现了基类的接口这里指的是IDependency.AsSelf().AsImplementedInterfaces().PropertiesAutowired().InstancePerLifetimeScope();//Castle AOPbuilder.Register(c => new TranscationAop());//注册AspectCorebuilder.RegisterDynamicProxy();//builder.RegisterType<DocTypeCache>().AsImplementedInterfaces().Named<ICacheData>("DocTypeCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();builder.RegisterType<DepCache>().AsImplementedInterfaces().Named<ICacheData>("DepCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();builder.RegisterType<UserCache>().AsImplementedInterfaces().Named<ICacheData>("UserCache").PropertiesAutowired().InstancePerLifetimeScope().EnableInterfaceInterceptors();//注册系统所有Controller,由Autofac创建//var IControllerType = typeof(ControllerBase);//builder.RegisterAssemblyTypes(assemblies).Where(t =>//                IControllerType.IsAssignableFrom(t) && t != IControllerType).PropertiesAutowired();//      var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()//.Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();//      builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();// builder.RegisterType<SysMenuService>().As<ISysMenuService>().PropertiesAutowired().InstancePerLifetimeScope();//注册所有控制器//autofac来实现属性注入var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes().Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();}}

如果要属性注入则在StartUp中        public void ConfigureServices(IServiceCollection services)
加入

services.AddControllersAsServices() //use by property DI

.Net Core3.1下Autofac的使用相关推荐

  1. autofac 作用域_.Net Core3.1下使用Autofac实现依赖注入

    前言 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个.它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.主要优点如下(此段描述为 ...

  2. .net core3.1下路由的配置

    在.net core3.1下路由的配置方式跟2.0时代已经有了区别不再采用routes.MapRoute的方式,改用endpoints.MapControllerRoute的方式 配置普通的路由如 e ...

  3. .net core3.1 下由Autofac接管IOC

    我们都知道,.net core天生自带IOC容器,但是他的功能其实并不强大,而且有坑:在构造注入的时候,他默认找参数最少的构造函数. 这里,我讲解如何使用Autofac去接管IOC,至于为什么要选Au ...

  4. .Net Core3.1下使用Swagger搭建web api项目

    前言:微软于前天发布.net core 3.1正式版,并将长期支持3.1.所以我听到这个消息后就急忙下载.net core 3.1的SDK和Runtime,应该是公司最先用3.1的攻城狮了????. ...

  5. asp.net core3.1 下跨域的正确方式

    作为一个上进的程序猿必须要紧跟技术.等core出来稳定后(企业招聘基本全要会core,不会混不了饭吃泪)决定要掌握core.于是在腾讯课堂花了1.1软妹币白嫖了2门课程后又在B站学习一门掌握了入门知识 ...

  6. Autofac框架初识与应用

    一.前言 这上一篇中,主要讲述了什么是IoC容器,以及了解到它是DI构造函注入的框架,它管理着依赖项的生命周期以及映射关系,同时也介绍实践了在ASP.Net Core中,默认提供的内置IoC容器,以及 ...

  7. .NET 中依赖注入组件 Autofac 的性能漫聊

    Autofac 是一款超赞的 .NET IoC 容器 ,在众多性能测评中,它也是表现最优秀的一个.它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改.它的实现方式是将常 ...

  8. Autofac在项目中应用的体会,一个接口多个实现的情况

    在本人接触的项目中Autofac应用的比较多一些,我理解的他的工作原理就是  注册类并映射到接口,通过注入后返回相应实例化的类! 下面说说我在项目中的实际应用 先来简单介绍下Autofac的使用 1. ...

  9. 【C#】依赖注入及Autofac

    文章目录 什么是依赖? 什么是注入? 为什么要反转? 何为容器 默认容器 Autofac框架 框架使用 1.NuGet引入包 2.在ConfigureServices中创建容器对象,并返回IServi ...

最新文章

  1. 2021年大数据研究中心支持项目交流会成功举行
  2. 哪些编程语言需要修复?
  3. java捕捉了异常_java 异常捕获与异常处理
  4. 关于IDEA WEB项目的创建与无法继承HttpServlet问题
  5. kali linux wps 2019 删除_良心推荐!Linux系统下常用办公软件大盘点
  6. forth day ---内置函数、匿名函数
  7. 关于用Sql Server 2008 搭建一个多评委多客户端的比赛打分平台的整体构想
  8. Java之编写FlyBird小游戏
  9. 中华石杉-- --分布式服务框架Dubbo的笔记
  10. python股票策略_浅谈python量化 双均线策略(金叉死叉)
  11. css中的flex(弹性)布局
  12. 哈工大计算机网络Mooc 第九章笔记(网络层(下))
  13. Android仿微信朋友圈图片上传选择器布局
  14. JAV迷你共享单车项目
  15. 小福利,教大家用excel函数实现切片器的功能
  16. 学画画,这些美术集标记好的学习重点拿去用
  17. 对PowerMill编程软件还不了解?赶紧来看看这篇文章吧
  18. 嵌套列表与列表推导式
  19. 玲珑骰子安红豆,入骨相思君知否?
  20. 51单片机_7-2 使用内部计时器实现时钟显示

热门文章

  1. spring简介和IOC
  2. 1999-2018年地级市城镇化率(非农口径)
  3. python语言如何画圆_怎么用python画圆
  4. 1.2 计算机的分类和应用
  5. python+qt5项目管理系统开发_Qt5——从零开始的学生管理系统
  6. AIX 如何在 IBM AIX 上配置 YUM 并创建本地存储库
  7. 【typeorm】typeorm学习笔记(一)
  8. 研读《基于关节点提取的老年人跌倒检测算法》论文
  9. 面向教育行业的MDM(移动设备管理)解决方案
  10. html静态网站简单的学生网页作业源码 基于游戏网站设计与实现共计10个页面 (仿地下城与勇士游戏网页)