Autofac注册组件(3)
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)相关推荐
- vue组件一直注册不了_Vue注册组件命名时不能用大写的原因浅析
这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得. 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的 ...
- 给容器中注册组件 || @Scope -- @Lazy -- @Conditional({Condition}) -- @Import--使用Spring提供的 FactoryBean
* @Scope:调整作用域 * prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中. * 每次获取的时候才会调用方法创建对象: ...
- factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...
本文包含以下内容: @Import快速导入组件 配合ImportSelector 导入组件 配合ImportBeanDefinitionRegistrar 导入组件 FactoryBean 定义工厂注 ...
- vue组件一直注册不了_【报Bug】现在究竟支不支持Vue.use内注册组件
详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) 我测试了所有框架支持的小程序 ...
- spring注解开发:容器中注册组件方式
1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...
- conditional_如何:在Spring中使用@Conditional和Condition注册组件
conditional Spring中的@Profile批注可用于任何自动检测候选对象的Spring组件(例如, @Service Component, @Service @Component , @ ...
- 如何:在Spring中使用@Conditional和Condition注册组件
Spring中的@Profile批注可以用于任何自动检测候选的Spring组件(例如, @Service Component, @Service @Component , @Service @Conf ...
- vue 实例化几种方式_vue注册组件的几种方式总结
vue注册组件的几种方式总结 1.全局注册(这种方式注册组件必须在vue实例化之前声明) Vue.component('tag-name',{}) 2.局部注册 var Child = { templ ...
- 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放
一.什么是组件化? 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题 ...
最新文章
- usaco Arithmetic Progressions
- thinkphp的匹配php后缀,ThinkPHP的后缀操作方法配置 罢工了
- 阿里前CEO卫哲的万字长文:被马云骂醒,看透B2B 10大核心问题!
- 管理之道(三) - 不要吝惜赞美
- 2017西安交大ACM小学期 神器插座 KMP匹配
- 如何在 Ubuntu 14.04 和 12.04 上测试 systemd
- angularjs封装bootstrap官网的时间插件datetimepicker
- LeetCode 293. 翻转游戏
- Python | Xpath实战训练
- spark sql 数据类型转换_spark dataframe 类型转换
- ROS限速不生效问题
- 漫画:如何优化 “字符串匹配算法”?
- java获取当前行数
- Android--SharedPreferences数据存储方案
- 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
- CT一般扫描参数_CT扫描参数介绍(1)
- 将寄存器放入IOB的方法
- 什么是CMOS与BIOS?又有什么区别?
- Spark——Spark概述
- Excel批量插入多行空白行
热门文章
- MATLAB怎么计算曲面面积,Matlab曲面面积估计.doc
- 信息系统项目管理师 第七章-项目成本管理
- 【Redis】实现附近人功能
- DOSBOX的简单使用
- 6.Spring学习笔记_Bean之间的关系 (by尚硅谷_佟刚)
- Oracle 时间段查询
- HTML网页调用海康摄像头,[FastVideo]Web Html5 无插件方式连接海康摄像头[2]
- hive的引擎mapreduce、tez和spark三者比较
- 百度智能小程序巡检调度方案演进之路
- 【智利支付】智利外贸收款方式Servipag