Можно ли назвать «Нападающих» индивидуально и / или иначе, чем услугу «За» в Замке Виндзор?
У меня есть служебный интерфейс, использующий дженерики. Этот интерфейс имеет несколько реализаций. Эти реализации также используют универсальные шаблоны и предоставляют несколько конкретных компонентов для интерфейса закрытой службы. Для ( чрезвычайно упрощенного) примера:
public interface IService<T1, T2> { }
public class ServiceImpl<T> :
IService<IDbConnection, T>,
IService<DbConnection, T>,
IService<SqlConnection, T> { }
После регистрации в замке Виндзор:
container.Register(Component
.For<IService<SqlConnection, SomeOtherClass>>()
.Named(NameHelper.GetName(typeof(SqlConnection), typeof(SomeOtherClass))
.Forward<IService<DbConnection, SomeOtherClass>>()
.Forward<IService<IDbConnection, SomeOtherClass>>()
.ImplementedBy<ServiceImpl<SomeOtherClass>>()
.LifestyleTransient());
Есть ли способ дать альтернативные имена каждому из
Forward
х? Решить проблему, я полагаю, можно, зарегистрировав каждый
Foward
индивидуально со своим собственным именем, но было бы неплохо просто иметь возможность делать что-то вроде:
.Forward<IService<DbConnection, SomeOtherClass>>(
NameHelper.Getname(typeof(DbConnection), typeof(SomeOtherClass))
(За пределами этого упрощенного вопроса и примера, но я, вероятно, также смогу достичь общей цели дизайна, используя
IGenericServiceStrategy
и / или
IGenericImplementationMatchingStrategy
вместо того, чтобы регистрировать каждую индивидуальную перестановку, но я нахожусь в условиях ограниченного времени, поэтому было бы здорово иметь возможность просто называть форвардов индивидуально).
Рассматриваемый код использует Castle Windsor v3.3.0.