3

在我们正在进行的项目中,我们使用 Castle Windsor 作为 IOC 容器。目前,为了灵活性,我们在配置文件中指定了所有依赖项。

我们的配置文件有点大,为了使绑定更容易管理,我更愿意将它们放在代码中。当然,这意味着我失去了在生产环境中轻松更改某些绑定的灵活性。

我想知道是否可以让配置文件中的绑定覆盖代码中的绑定。这意味着我可以在代码中指定所有默认绑定,然后如果我想在生产中更改绑定,则添加一个配置文件,但有一些例外。

因为我使用的是温莎城堡,所以我对这在温莎城堡是否可行很感兴趣。但是,我们正在考虑迁移到不同的 IOC 容器(例如 NInject)。因此,如果另一个人可以做得更好,那么我也对那一点信息感兴趣。

(PS:我也在研究自动绑定,因为我们的大多数接口都只是用于单元测试目的,并且只有一个类用相同的名称减去“I”来实现它。我什至考虑将这些接口放入与实现相同的文件。)

提前致谢。

更新

我找到了一个不错的 Ninject 扩展,它可以让我以我想要的方式进行自动绑定。我还发现了一个用于进行 XML 绑定的 Ninject 扩展。但是,我找不到这些 XML 绑定是否会覆盖代码绑定。

4

1 回答 1

1

我通过代码绑定实现了我认为您所追求的灵活性,但这可能不是您想要的设计类型......

我将我的功能拆分为模块(具有一个且只有一个实现 IModule 接口的类的程序集)。每个组件中 IModule 的实现将该组件中的所有实现类注册到 DI 容器中。然后我有一个模块加载器类,它扫描程序集,寻找该程序集的 IModule 实现并调用适当的模块加载方法。这样,每个程序集都是自包含的,当我想切换实现时,我可以从字面上放入我想要的任何程序集。

有了这种能力,您就可以决定如何拆分您的程序集,使其与您想要换出的实现一样细化。如果您想要很大的灵活性,那么这是非常繁重的组装,这就是为什么它不是每个人的策略。

在我的研究中,我发现 Windsor 开发人员认为覆盖绑定是一种不好的做法,因此几乎没有提供这样做的能力。

于 2012-10-14T19:14:23.717 回答