[Asp.Net Core]Autofac抽象多实现的问题

Posted 厦门德仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]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抽象多实现的问题

[Asp.Net Core]Autofac抽象多实现的问题

[Asp.Net Core]Autofac单抽象多实现构造函数注入

[Asp.Net Core]Autofac单抽象多实现构造函数注入

[Asp.Net Core]Autofac抽象支持AOP

[Asp.Net Core]Autofac抽象支持AOP