Autofac注册组件

  • 官网地址
  • 一、扫描类型
    • 1.过滤类型(Filtering Types)
    • 2.指定服务(Specifying Services)
  • 二、net core 3.x使用Autofac以及使用Autofac进行自动注入
    • 一、需要引入的库:
    • 二、使用Autofac工厂
    • 三、StarpUp.cs中添加方法
    • 四、设置注册类型模块

官网地址

点击这里

一、扫描类型

在其他方面,被称为约定驱动的注册或扫描,Autofac可以根据用户指定的规则从一个程序集中注册一组类型:

 builder.RegisterAssemblyTypes(typeof(BaseRepository<>).Assembly)

RegisterAssemblyTypes()
调用将适用一组规则,如果有多种不同的组件注册,一次或多次调用

1.过滤类型(Filtering Types)

RegisterAssemblyTypes()接受一个或多个程序集的参数数组。默认情况下,程序集中的所有的公共的,具体类将被注册。你可以过滤一组注册的类型,通过使用linq表达式。

过滤注册类型,使用Where()语法过滤:

  builder.RegisterAssemblyTypes(typeof(IService).Assembly)//IsAssignableFrom 判断IService类型是否与X类型一样.Where(x => typeof(IService).IsAssignableFrom(x))//  是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源).AsImplementedInterfaces().InstancePerLifetimeScope();

2.指定服务(Specifying Services)

对于RegisterAssemblyTypes()注册语法是单个类型注册语法的超级集合,所以像As()方法都将在程序集中很好的工作

 builder.Register().As<>().InstancePerLifetimeScope();

正如通常的组件注册,可以一起添加多个As()调用。
还添加了一些额外的注册方法,使其更容易建立共同的约定:

方法 描述 示例
AsImplementedInterfaces() 注册类型提供所有其公共接口作为服务(不包括IDisposable接口)。 builder.RegisterAssemblyTypes(asm).Where(t => t.Name.EndsWith(“Repository”)).AsImplementedInterfaces();
AsClosedTypesOf(open) 可分配给注册类型一个接近开放泛型类型的实例。 builder.RegisterAssemblyTypes(asm).AsClosedTypesOf(typeof(IRepository<>));
AsSelf() 默认: 注册类型本身 - 当重写其他服务默认规范时非常有用。 builder.RegisterAssemblyTypes(asm) .AsImplementedInterfaces().AsSelf();

二、net core 3.x使用Autofac以及使用Autofac进行自动注入

一、需要引入的库:

AutofacAutofac.Extensions.DependencyInjection

二、使用Autofac工厂

3.0版本

Program.cs中添加:.UseServiceProviderFactory(new AutofacServiceProviderFactory())

6.0

Program.cs添加builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).UseServiceProviderFactory(new AutofacServiceProviderFactory());

三、StarpUp.cs中添加方法

 public virtual void ConfigureContainer(ContainerBuilder builder){builder.RegisterModule(new ApplicationModule(Configuration[ApiDefaults.ConnectionString]));builder.RegisterModule(new MediatorModule());}

四、设置注册类型模块

/// 自动注入通过继承Module
public class ApplicationModule : Module{//重写load方法用于加载配置protected override void Load(ContainerBuilder moduleBuilder){var assemblys = AppDomain.CurrentDomain.GetAssemblies().ToArray();var perRequestType = typeof(IScoped);moduleBuilder.RegisterAssemblyTypes(assemblys).Where(t => perRequestType.IsAssignableFrom(t) && t != perRequestType).PropertiesAutowired().AsImplementedInterfaces().InstancePerLifetimeScope();var perDependencyType = typeof(ITransient);moduleBuilder.RegisterAssemblyTypes(assemblys).Where(t => perDependencyType.IsAssignableFrom(t) && t != perDependencyType).PropertiesAutowired().AsImplementedInterfaces().InstancePerDependency();var singleInstanceType = typeof(ISingleton);moduleBuilder.RegisterAssemblyTypes(assemblys).Where(t => singleInstanceType.IsAssignableFrom(t) && t != singleInstanceType).PropertiesAutowired().AsImplementedInterfaces().SingleInstance();}}

以上 ITransient、ISingleton、IScoped分别是代表三个生命周期的接口

Autofac注册组件(3)相关推荐

  1. vue组件一直注册不了_Vue注册组件命名时不能用大写的原因浅析

    这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得. 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的 ...

  2. 给容器中注册组件 || @Scope -- @Lazy -- @Conditional({Condition}) -- @Import--使用Spring提供的 FactoryBean

    * @Scope:调整作用域    * prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中.       *              每次获取的时候才会调用方法创建对象: ...

  3. factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...

    本文包含以下内容: @Import快速导入组件 配合ImportSelector 导入组件 配合ImportBeanDefinitionRegistrar 导入组件 FactoryBean 定义工厂注 ...

  4. vue组件一直注册不了_【报Bug】现在究竟支不支持Vue.use内注册组件

    详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) 我测试了所有框架支持的小程序 ...

  5. spring注解开发:容器中注册组件方式

    1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...

  6. conditional_如何:在Spring中使用@Conditional和Condition注册组件

    conditional Spring中的@Profile批注可用于任何自动检测候选对象的Spring组件(例如, @Service Component, @Service @Component , @ ...

  7. 如何:在Spring中使用@Conditional和Condition注册组件

    Spring中的@Profile批注可以用于任何自动检测候选的Spring组件(例如, @Service Component, @Service @Component , @Service @Conf ...

  8. vue 实例化几种方式_vue注册组件的几种方式总结

    vue注册组件的几种方式总结 1.全局注册(这种方式注册组件必须在vue实例化之前声明) Vue.component('tag-name',{}) 2.局部注册 var Child = { templ ...

  9. 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放

    一.什么是组件化? 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题 ...

最新文章

  1. usaco Arithmetic Progressions
  2. thinkphp的匹配php后缀,ThinkPHP的后缀操作方法配置 罢工了
  3. 阿里前CEO卫哲的万字长文:被马云骂醒,看透B2B 10大核心问题!
  4. 管理之道(三) - 不要吝惜赞美
  5. 2017西安交大ACM小学期 神器插座 KMP匹配
  6. 如何在 Ubuntu 14.04 和 12.04 上测试 systemd
  7. angularjs封装bootstrap官网的时间插件datetimepicker
  8. LeetCode 293. 翻转游戏
  9. Python | Xpath实战训练
  10. spark sql 数据类型转换_spark dataframe 类型转换
  11. ROS限速不生效问题
  12. 漫画:如何优化 “字符串匹配算法”?
  13. java获取当前行数
  14. Android--SharedPreferences数据存储方案
  15. 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
  16. CT一般扫描参数_CT扫描参数介绍(1)
  17. 将寄存器放入IOB的方法
  18. 什么是CMOS与BIOS?又有什么区别?
  19. Spark——Spark概述
  20. Excel批量插入多行空白行

热门文章

  1. MATLAB怎么计算曲面面积,Matlab曲面面积估计.doc
  2. 信息系统项目管理师 第七章-项目成本管理
  3. 【Redis】实现附近人功能
  4. DOSBOX的简单使用
  5. 6.Spring学习笔记_Bean之间的关系 (by尚硅谷_佟刚)
  6. Oracle 时间段查询
  7. HTML网页调用海康摄像头,[FastVideo]Web Html5 无插件方式连接海康摄像头[2]
  8. hive的引擎mapreduce、tez和spark三者比较
  9. 百度智能小程序巡检调度方案演进之路
  10. 【智利支付】智利外贸收款方式Servipag