使用 Simple Injector 构建基于插件的应用程序

Building a plugin-based application with Simple Injector

我的任务是编写技术规范(并在稍后实施)一个将构建在几个子模块上的系统。子模块将部分并行开发,所以我真的很想避免每次添加或更新插件时重新启动整个系统。因为我已经在另一个项目中使用过 Simple Injector,所以我计划在每个子模块中将它用于 IoC。与其在将模块绑定在一起的核心中引入 MEF(托管扩展框架)或 MAF(托管插件框架),我的计划是看看 Simple Injector 是否也可以用于处理模块。

我的计划是使用 FileSystemWatcher 监视插件目录,当检测到更改时,要么让 Simple Injector 执行它,要么推出我自己的解决方案。我已阅读讨论 here,但我相信我的用例有所不同。

要求:

为了能够动态 load/reload 程序集,我计划 运行 每个模块在单独的 AppDomain 中。

使用 Simple Injector 可以吗?还有其他想法吗?也许是我没有想到的。

这不是 DI 容器所促进的。他们只是组成对象图。在我看来,您需要 运行 隔离进程或应用程序域(否则无法重新加载它们)。

这意味着 DI 容器将 运行 在该隔离域(即您的模块)和该模块内,您将像往常一样使用您的容器。这与 Simple Injector 没有什么不同。

因此,根据与 Steven 的通信,我决定寻找替代方案并与我的 CTO 交谈。这导致了一个完全不同的架构(微服务——可能作为 Azure Functions 实现)通过消息总线(Azure 服务总线)进行通信。这符合所有要求,并且(使用 Azure Functions)确保我们仅在出现应处理的事件时才为计算能力付费。