如何在温莎城堡中命名容器

本文关键字:城堡 命名容器 | 更新日期: 2023-09-27 18:36:27

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

我已经为要添加到根容器的多个子容器创建了配置。但是,我需要能够在运行时选择一个子容器,并根据我们的业务上下文将其用于注入。因此,每个容器都应该由业务上下文名称标识(在我们的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())

注意:当您使用默认构造函数创建温莎容器时,将使用默认内核和默认组件安装程序