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())