Я пытаюсь зарегистрировать конкретный класс, который основан на универсальном классе, и этот универсальный класс основан на универсальном интерфейсе. Проблема в том, как сделать это в Castle Windsor и ASP.NET Boilerplate, чтобы мне не нужно было много кода, который регистрирует его один за другим.
public interface IService<T> where T: class ...
public class Service<T, TE, TPrimary> : IService<T> where T: class ...
public class ConcreteService : Service<SomeType, SomeType2, string> ...
public class AnotherConcreteService : Service<AnotherSomeType, AnotherSomeType2, string> ...
С такой структурой я хотел бы зарегистрировать IService<SomeType>
класс ConcreteService
, который реализует этот сервис. Как я мог сделать это с Виндзорским замком? Реализация по одному выглядит так:
IocManager.IocContainer.Register(Component.For(typeof(IQueryService<SomeType>))
.ImplementedBy(typeof(ConcreteService)).Named("ConcreteTest"));
IocManager.IocContainer.Register(Component.For(typeof(IQueryService<AnotherSomeType>))
.ImplementedBy(typeof(AnotherConcreteService)).Named("AnotherConcreteTest"));
Использование, которое я хотел бы иметь:
var test1 = IocContainer.Resolve<IQueryService<SomeType>(); // Here should be ConcreteService
var test2 = IocContainer.Resolve<IQueryService<AnotherSomeType>(); // Here should be AnotherConcreteService
При линейном подходе это работает, но как зарегистрировать все на основе IQueryService<>
?