Более простым и намного более простым способом было бы использовать переопределения службы 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;
}