gpt4 book ai didi

c# - 将 IoC 容器用于插件架构

转载 作者:太空狗 更新时间:2023-10-29 18:33:06 25 4
gpt4 key购买 nike

如果我错了请纠正我,但 MEF 仅适用于管理一组可以自动发现和自动连接的未知事物(插件)。对于 future 的项目,我们将需要一个真正的 IoC 容器来显式配置应用程序的已知部分(MEF 不擅长),但另外我们还需要支持自动发现的插件(最好是没有属性的 POCO,如果可能的话) .

IoC 容器是否可以轻松/默认支持此功能?如果可以,你能给一个关于如何在 Unity 和 StructureMap 中完成的快速提示?这些是我们目前青睐的两个。我们真的很想避免依赖 IoC 容器 MEF。

最佳答案

我认为重要的是要注意,虽然 MEF 不是传统意义上的 IoC 容器,但它正在执行控制反转。事实上,我不同意这一点,并认为 MEF 是一个 IoC 容器,与其他容器非常相似。 Unity 和 MEF 之间的真正区别在于,默认情况下 MEF 支持显式类型解析之上的组合,以及配置之上的类型发现。但是,正如我们在 MEFContrib 项目中看到的那样,完全有可能让 MEF 的行为更像一个传统的 IoC 容器。 MEF 为模块化组件行为提供了一个很好的基线,消除了很多硬嫁接,并且它的设计方式允许您添加更多功能。比方说,你现有的代码库是围绕另一个 IoC 容器或服务定位器构建的,你可以连接一个 ExportProvider 来这样做,你可以将一个提供者连接到一个服务定位器,例如 Common Service Locator项目,然后插入兼容的 CSL 实现,并让 MEF 使用从其他 IoC 容器派生的类型组成组件部分。 MEF 还为您执行依赖注入(inject)。

如果你想避免依赖于特定的 IoC 容器或 MEF 本身,你总是可以使用像公共(public)服务定位器这样的东西,它是对公共(public)容器操作的抽象。这样,如果您需要/想要更改所有内容的连接方式,那将相对轻松。大多数 IoC 容器和 MEF 都有兼容的 CSL 实现。

希望对您有所帮助。

关于c# - 将 IoC 容器用于插件架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963275/

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