是否有快捷方式指定依赖项映射到容器中已有对象的属性?我知道我可以写一个工厂方法来做这件事,只是想知道是否有更优雅的方式。
我可以通过命名A然后为B编写安装程序来指定组件A具有映射到组件B实例的依赖关系:
container.Register(Component.For<IMdiController>()
.ImplementedBy<MdiController>()
.DependsOn(Dependency.OnComponent("shell", "shell")));
在这个例子中,假设依赖“shell”不是映射到组件“shell”,而是映射到该组件的属性(例如,“shell.SomeProperty” - 我已经尝试过这个点语法而它没有工作)。
答案 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));
我不确定在这样调用这样的决定方面是否会产生影响,但也许没关系。