У меня типичный интерфейс репозитория, IRepository<T>
, и множество конкретных репозиториев.Большинство конкретных репозиториев выглядят так:
class ConcreteRepository<T> : IRepository<T> { .. }
Их легко зарегистрировать в StructureMap:
For(typeof(IRepository<>)).Use(typeof(ConcreteRepository<>));
Однако, некоторые из моих конкретных репозиториев выглядят так:
class AbnormalRepository<T1, T2> : IRepository<T1>, IAbnormal<T2> { .. }
Я все еще хочу использовать эти ненормальные репозитории как IRepository<T>
s, поэтому для них я в настоящее время использую специальные правила:
// this sucks!
For(typeof(IRepository<Foo1>)).Use(typeof(AbnormalRepository<Foo1, Bar1>));
For(typeof(IRepository<Foo2>)).Use(typeof(AbnormalRepository<Foo2, Bar2>));
Было бы неплохо, если бы я мог просто указатьфункция, которую StructureMap может использовать для создания моих репозиториев, поскольку я знаю, что все мои ненормальные репозитории реализуют IAbnormal<T>
.Есть идеи?