Если я определил в конфиге:
container.Register(
Component.For<X.Y.Z.IActivityService>()
.ImplementedBy<X.Y.Z.ActivityService>()
.ServiceOverrides(ServiceOverride.ForKey("Listeners").Eq(new [] { typeof(X.Y.Z.DefaultActivityListener).FullName }))
.LifeStyle.Transient
);
и я хочу расширить эту конфигурацию и добавить новый элемент в свойство массива Listeners, чтобы окончательная конфигурация была эффективной:
container.Register(
Component.For<X.Y.Z.IActivityService>()
.ImplementedBy<X.Y.Z.ActivityService>()
.ServiceOverrides(ServiceOverride.ForKey("Listeners").Eq(new [] { typeof(X.Y.Z.DefaultActivityListener).FullName, "MyOtherListenerID" }))
.LifeStyle.Transient
);
Должен ли я знать содержимое «массива» при первой регистрации компонента, или я могу получить регистрацию компонента и добавить к нему?
Я хочу реализовать свою конфигурацию, используя шаблон декоратора, чтобы я мог построить свой контейнер, а затем расширить его по мере необходимости для различных сценариев. Это означает, что мне нужно иметь доступ к уже настроенным компонентам и добавлять к ним.
Думал иметь класс DefaultConfig
, который возвращает настройку по умолчанию, а затем один из нескольких классов "DecoratedConfig
", который расширил бы конфигурацию по умолчанию.
Так что я бы получил
IWindsorContaner c = new DecoratedConfig(new DefaultConfig()).InitialiseContainer();
DefaultConfig
установит ActivityService
с DefaultActivityListener
(как показано в примере).
DecoratedConfig
распознает, что ActivityService
было создано, и добавит собственную реализацию Listener к массиву Listeners
в ActivityService
.
Спасибо.