【问题标题】:How can I name a container in Castle Windsor?如何命名温莎城堡中的容器?
【发布时间】:2016-02-25 21:49:49
【问题描述】:

在一个工作项目中,我确定子容器是一种比类型工厂更好的方法(从逻辑角度来看),可以完成我们需要做的事情。

我已经为要添加到根容器的多个子容器创建了配置。但是,我需要能够在运行时选择一个子容器,并根据我们的业务上下文使用它进行注入。因此,每个容器都应该由业务上下文名称(在我们的 WebAPI WindsorCompositionRoot 中)来标识。

看起来好像 Castle 不允许我在构建容器时设置名称。允许名称的一个重载似乎试图从 XML 配置中提取,这不是我想要的。 (我不知道那里是否缺少某些东西。)name 属性是一个 getter,没有 setter,所以我无法在实例化后设置名称。

如何命名容器,以便使用GetChildContainer 轻松拉取它?由于我们项目的结构方式,尝试保留对子容器的引用(甚至返回它)会有些痛苦——而且很可能是糟糕的设计。

【问题讨论】:

  • 您找到解决方案了吗?我也有同样的问题。

标签: c# .net castle-windsor


【解决方案1】:

要创建带有名称的 Windsor 容器,您可以通过传递 DefaultKernel 和 DefaultComponentsInstaller 作为参数来使用以下构造函数

public WindsorContainer(string name, IKernel kernel, IComponentsInstaller installer)

调用上述构造函数的示例代码

new Castle.Windsor.WindsorContainer(containerName, new DefaultKernel(), new DefaultComponentInstaller())

注意: DefaultKernel 和 DefaultComponentInstaller 将在您使用默认构造函数创建 Windsor 容器时使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多