DI - 基于通用接口的程序集范围安装不注册其实现
DI - Assembly wide install based on generic interface does not register its implementations
我正在尝试使用 Castle Windsor 注册接口及其实现。
我有一个名为 ProductRiskStatusChecks
的 Class,它实现了 IChecks<IProductRisk>
,其中 IProductRisk
实现了 IValidateDomainObject
我尝试按如下方式安装这些 -
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes.FromAssemblyNamed("OpenBoxExtraBusinessLogic")
.BasedOn<IChecks<IValidateDomainObject>>()
.WithServiceAllInterfaces().LifestyleSingleton());
}
但它不会针对 IChecks<IProductRisk>
安装 ProductRiskChecks
但是如果我按照下面的方式进行显式注册,它就可以正常工作
container.Register(Component.For<IChecks<IProductRisk>>().ImplementedBy<ProductRiskChecks>());
我能知道为什么第一个案例没有登记我的支票吗class?
谢谢
由于类型不匹配,您的注册无效(正如 Alexei 提到的那样)。
我不太确定你想在这里实现什么,但如果你有多个 IChecks<>
的实现,每个实现都有不同的通用参数,并且你想注册它们,你可以使用 [=16 进行注册=]开放仿制药:
container.Register(Classes.FromAssemblyNamed("OpenBoxExtraBusinessLogic")
.BasedOn(typeof(ICheck<>))
.WithServiceAllInterfaces()
.LifestyleSingleton())
我正在尝试使用 Castle Windsor 注册接口及其实现。
我有一个名为 ProductRiskStatusChecks
的 Class,它实现了 IChecks<IProductRisk>
,其中 IProductRisk
实现了 IValidateDomainObject
我尝试按如下方式安装这些 -
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes.FromAssemblyNamed("OpenBoxExtraBusinessLogic")
.BasedOn<IChecks<IValidateDomainObject>>()
.WithServiceAllInterfaces().LifestyleSingleton());
}
但它不会针对 IChecks<IProductRisk>
安装 ProductRiskChecks
但是如果我按照下面的方式进行显式注册,它就可以正常工作
container.Register(Component.For<IChecks<IProductRisk>>().ImplementedBy<ProductRiskChecks>());
我能知道为什么第一个案例没有登记我的支票吗class?
谢谢
由于类型不匹配,您的注册无效(正如 Alexei 提到的那样)。
我不太确定你想在这里实现什么,但如果你有多个 IChecks<>
的实现,每个实现都有不同的通用参数,并且你想注册它们,你可以使用 [=16 进行注册=]开放仿制药:
container.Register(Classes.FromAssemblyNamed("OpenBoxExtraBusinessLogic")
.BasedOn(typeof(ICheck<>))
.WithServiceAllInterfaces()
.LifestyleSingleton())