gpt4 book ai didi

c# - 使用我的 IOC 容器的配置文件绑定(bind)覆盖代码内绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 17:59:05 25 4
gpt4 key购买 nike

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

我们的配置文件有点大,为了使绑定(bind)更易于管理,我更愿意将它们放在代码中。当然,这意味着我失去了一些灵 active ,无法在生产中轻松更改某些绑定(bind)。

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

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

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

提前致谢。

更新

我找到了 a nice Ninject extension that will allow me to do automatic bindings完全按照我想要的方式。我还找到了a Ninject extension for doing XML bindings .但是我找不到这些 XML 绑定(bind)是否在代码绑定(bind)中被覆盖。

最佳答案

我认为您在代码中使用绑定(bind)实现了灵 active ,但它可能不是您想要的设计类型...

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

有了这种能力,您就可以决定如何拆分您的程序集,使其尽可能细化,就像您想要交换实现一样。如果您想要很大的灵 active ,这会非常繁重,这就是为什么它不是适合所有人的策略。

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

关于c# - 使用我的 IOC 容器的配置文件绑定(bind)覆盖代码内绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com