如果我在配置中定义:
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
数组中。谢谢。
最佳答案
订阅 Kernel.ComponentModelCreated
事件。您可以从那里更改任何组件参数。见 this 。不一定非得是做这件事的设施,但它很方便。
关于caSTLe-windsor - 温莎城堡 : How can I update a components registration,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/938898/