[Asp.Net Core]Autofac抽象多实现的问题
Posted 厦门德仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]Autofac抽象多实现的问题相关的知识,希望对你有一定的参考价值。
Autofac抽象多实现的问题
增加一个抽象实现
1.一个抽象多个实例,都注册了,通过构造函数用抽象类型来获取实例,哪个后面注册就获取到哪一个;覆盖型;
示例:
#region 注册单抽象多实例
containerBuilder.RegisterType<TestServiceA>().As<ITestServiceA>();
containerBuilder.RegisterType<TestServiceUpdate>().As<ITestServiceA>();
#endregion
2.一个抽象多个实例,都注册了,可以通过一个IEnumerable<抽象>,当做构造函数参数,可以获取到所
3.注册一个抽象的多个实例资源,如下方式注册,可以在控制器的构造函数中,使用具体实现类型作为参数类型,可以匹配到不同到具体类型实例
public SixThController(
ITestServiceA iTestServiceA, IEnumerable<ITestServiceA> iTestServiceAList,
TestServiceA iTestServiceAAA, TestServiceUpdate iTestServiceUpdate)
_iTestServiceA = iTestServiceA;
_iTestServiceAList = iTestServiceAList;
_iTestServiceAAA = iTestServiceAAA;
_iTestServiceUpdate = iTestServiceUpdate;
注册所有资源
#region 单抽象多实现
containerBuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(t => t.IsAssignableTo<ITestServiceA>()));
#endregion
4. 需要分类
namespace DeZai.Net5Demo.Utility.AutofacExtension
public class AutofacModule: Module
protected override void Load(ContainerBuilder builder)
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(t => t.IsAssignableTo<ITestServiceA>()));
#region 单抽象多实现
//containerBuilder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource(t => t.IsAssignableTo<ITestServiceA>()));
containerBuilder.RegisterModule(new AutofacModule());
containerBuilder.RegisterModule<AutofacModule>();
#endregion
以上是关于[Asp.Net Core]Autofac抽象多实现的问题的主要内容,如果未能解决你的问题,请参考以下文章
[Asp.Net Core]Autofac单抽象多实现构造函数注入