C# 来自继承的依赖注入

问题描述 投票:0回答:1

我之前看到过无需显式注入接口的实现,创建接口时可以简单地继承例如接口“IamContainerRegistered”,并在编译时注入接口

抱歉,我没有代码可以提供,我不确定从哪里开始,但感谢帮助。

因此,在伪类中,对于每个由 IAmContainerRegistered 继承的接口:

builder.RegisterType<ClassName>().As<InterfaceName>().InstancePerRequest();

(使用 AutoFac)

举例来说,我有

ITest1 : IAmContainerRegistered
...
ITest2 : IAmContainerRegistered

这将产生:

   builder.RegisterType<Test1>().As<ITest1>().InstancePerRequest();
   builder.RegisterType<Test2>().As<ITest2>().InstancePerRequest();
c# dependency-injection interface autofac
1个回答
0
投票

您可以使用程序集扫描和过滤来获取实现

IAmContainerRegistered

的所有类型
var asm = Assembly.GetExecutingAssembly();
  
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(asm)
    .Where(t => t.IsAssignableTo<IAmContainerRegistered>())
    .AsImplementedInterfaces();

var c = builder.Build();

var t1 = c.Resolve(typeof(ITest1)); //Test1
var t2 = c.Resolve(typeof(ITest2)); //Test2
var unwanted = c.Resolve(typeof(IAmContainerRegistered)); //Test2

缺点:使用

AsImplementedInterfaces()
代替显式接口名称,因此
IAmContainerRegistered
接口也将被注册(请参阅示例中的
unwanted
解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.