如果我在配置中定义:

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/

10-15 17:20