[英]How can I name a container in Castle Windsor?
在一个工作项目中,我确定子容器是比类型化工厂更好的方法(从逻辑的角度来看)来完成我们需要做的事情。
我已经为要添加到根容器的多个子容器创建了配置。 但是,我需要能够在运行时选择一个子容器并根据我们的业务上下文使用它进行注入。 因此,每个容器都应由业务上下文名称(在我们的 WebAPI WindsorCompositionRoot 中)标识。
看起来 Castle 不允许我在构建容器时设置名称。 允许名称的一个重载似乎试图从 XML 配置中提取,这不是我想要的。 (我不知道那里是否缺少某些东西。) name
属性是一个 getter,没有 setter,因此我无法在实例化后设置名称。
如何命名容器以便我可以使用GetChildContainer
轻松拉出它? 由于我们项目的结构方式,尝试保留对子容器的引用(甚至返回它)会有些痛苦 - 并且很可能是一个糟糕的设计。
要创建具有名称的 Windsor 容器,您可以通过将 DefaultKernel 和 DefaultComponentsInstaller 作为参数传递来使用以下构造函数
public WindsorContainer(string name, IKernel kernel, IComponentsInstaller installer)
调用上述构造函数的示例代码
new Castle.Windsor.WindsorContainer(containerName, new DefaultKernel(), new DefaultComponentInstaller())
注意: DefaultKernel 和 DefaultComponentInstaller 将在您使用默认构造函数创建 Windsor 容器时使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.