Можно ли назвать «Нападающих» индивидуально и / или иначе, чем услугу «За» в Замке Виндзор?

У меня есть служебный интерфейс, использующий дженерики. Этот интерфейс имеет несколько реализаций. Эти реализации также используют универсальные шаблоны и предоставляют несколько конкретных компонентов для интерфейса закрытой службы. Для ( чрезвычайно упрощенного) примера:

      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.

0 ответов

Другие вопросы по тегам