Dependency injection 如何在Autofac ContainerBuilder中为每个iSeries设备注册ServiceHelper?
我正在创建一个DI便利nuget包,它将添加组件的简单单函数注册(本着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
.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
,但我们需要更多关于您想做什么的详细信息