一种更简单、更简单的方法是使用 Windsor 的服务覆盖。
例如,像这样注册您的存储库:
container.Register(Component.For<IProductsRepository>
.ImplementedBy<ProductsRepository>()
.Named("defaultProductsRepository"),
Component.For<IProductsRepository>
.ImplementedBy<SpecificProductsRepository>()
.Named("specificProductsRepository"));
这将确保默认实现是ProductsRepository
. 现在,对于您的特定控制器,添加一个服务覆盖,如下所示:
container.Register(Component.For<NewController>()
.ServiceOverrides(ServiceOverride
.ForKey("productsRepository")
.Eq("specificProductsRepository"));
您可以在此处阅读文档。
编辑:如果您想使用 注册您的存储库AllTypes
,您可以调整注册密钥,例如:
container.Register(AllTypes.[how you used to].Configure(c => c.Named(GetKey(c)));
例如,GetKey
可能是这样的:
public string GetKey(ComponentRegistration registration)
{
return registration.Implementation.Name;
}