将依赖关系映射到现有组件的属性

时间:2012-08-13 02:26:01

标签: castle-windsor

是否有快捷方式指定依赖项映射到容器中已有对象的属性?我知道我可以写一个工厂方法来做这件事,只是想知道是否有更优雅的方式。

我可以通过命名A然后为B编写安装程序来指定组件A具有映射到组件B实例的依赖关系:

container.Register(Component.For<IMdiController>()
                        .ImplementedBy<MdiController>()
                        .DependsOn(Dependency.OnComponent("shell", "shell")));

在这个例子中,假设依赖“shell”不是映射到组件“shell”,而是映射到该组件的属性(例如,“shell.SomeProperty” - 我已经尝试过这个点语法而它没有工作)。

1 个答案:

答案 0 :(得分:1)

我可能没有正确理解你的问题,但也许你想要的是dynamic parameter

以下是docs中对此属性的描述:

  
    

有时您需要提供依赖项,在组件创建时才会知道该依赖项。例如,假设您需要为您的服务创建时间戳。您知道如何在注册时获取它,但您不知道它的具体值是什么(实际上每次创建新实例时它都会有所不同)。在这种情况下,您使用DynamicParameters方法。

  

在您的情况下,您可以执行以下操作,以便在从容器解析的SomeProperty组件上调用Shell属性,以获取something的值依赖性。

container.Register(
    Component
        .For<IMdiController>()
        .ImplementedBy<MdiController>()
        .DynamicParameters((k, d) => d["something"] = k.Resolve<Shell>().SomeProperty));

我不确定在这样调用这样的决定方面是否会产生影响,但也许没关系。