Dependency injection 如何在Autofac ContainerBuilder中为每个iSeries设备注册ServiceHelper?

Dependency injection 如何在Autofac ContainerBuilder中为每个iSeries设备注册ServiceHelper?,dependency-injection,.net-core,autofac,Dependency Injection,.net Core,Autofac,我正在创建一个DI便利nuget包,它将添加组件的简单单函数注册(本着.AddEntityFramework()-类似方法的精神)以与我的主包一起使用 基本上,库的用户将注册一个或多个IService(singleton)实例,然后调用我的方法RegisterServiceHelpers() 我希望该方法为用户注册的每个IService注册一个助手。示例方法(不工作) publicstaticvoidregisterservicehelpers(此ContainerBuilder自身) { fo

我正在创建一个DI便利nuget包,它将添加组件的简单单函数注册(本着
.AddEntityFramework()
-类似方法的精神)以与我的主包一起使用

基本上,库的用户将注册一个或多个
IService
(singleton)实例,然后调用我的方法
RegisterServiceHelpers()

我希望该方法为用户注册的每个
IService
注册一个助手。示例方法(不工作)

publicstaticvoidregisterservicehelpers(此ContainerBuilder自身)
{
foreach(self.Build().Resolve()中的var服务)
self.Register(c=>
新ServiceHelper(服务)).SingleInstance();
}
这是不可能的,因为Autofac只允许调用
.Build()
一次

此外,我还试图利用类似这样的隐式列表支持

self.Register(c=>c.Resolve()
.选择(工厂=>
新RabbitMqHealthCheckHandler(
工厂,
c、 解析()))
.SingleInstance()
.As();

但是这不起作用,更不用说
SingleInstance()

模块的
AttachToComponentRegistration
方法允许添加动态注册

classxmodule:模块
{
受保护的覆盖无效AttachToComponentRegistration(
IComponentRegistry组件注册,IComponentRegistry组件注册)
{
基本。附件组件注册(组件注册,注册);
if(registration.Services.OfType())
.Any(s=>s.ServiceType==typeof(iSeries设备)))
{
IComponentRegistration r=注册生成器
.ForType()文件
.带参数(
(pi,c)=>pi.ParameterType==typeof(iSeries设备),
(pi,c)=>c(
注册,可枚举。空())
.SingleInstance()
.CreateRegistration();
组件注册表。寄存器(r);
}
}
}

然后,您可以像
builder.RegisterModule()

那样注册模块。模块的
AttachToComponentRegistration
方法允许您添加动态注册

classxmodule:模块
{
受保护的覆盖无效AttachToComponentRegistration(
IComponentRegistry组件注册,IComponentRegistry组件注册)
{
基本。附件组件注册(组件注册,注册);
if(registration.Services.OfType())
.Any(s=>s.ServiceType==typeof(iSeries设备)))
{
IComponentRegistration r=注册生成器
.ForType()文件
.带参数(
(pi,c)=>pi.ParameterType==typeof(iSeries设备),
(pi,c)=>c(
注册,可枚举。空())
.SingleInstance()
.CreateRegistration();
组件注册表。寄存器(r);
}
}
}

然后,您可以像
builder.RegisterModule()

一样注册您的模块。另一个选项是使用
IRegistrationSource
,但我们需要更多关于您想做什么的详细信息。另一个选项是使用
IRegistrationSource
,但我们需要更多关于您想做什么的详细信息