我非常喜欢使用 Unity for .NET 应用程序来保持大型代码库中的代码模块和依赖项“可管理”。我已经在 .NET 中使用它多年了,方法是将程序集放入主程序的程序目录中并重新配置 IoC 配置文件(通常是 .exe.config 文件),将新行为注入(inject)程序中,而无需重新编译主程序。
但是,我已经开始尝试为 Windows 应用商店以及更重要的是 Windows IoT 编写通用应用程序 - 然而,由于这些应用程序在编译期间“打包”,我发现很难理解如何最好地继续这样做.
一种可能的选择是编译“模块”(PCL/通用类库)并将它们(及其依赖项)作为“内容”文件包含在通用应用程序中,然后在运行期间使用反射从这些程序集中加载类型。通过反射启动程序。
另一种选择是在编译之前将所有模块及其依赖项包含到主程序的项目引用中,但使用“穷人的依赖项注入(inject)来硬编码注册和解析”,但这对我来说真的是错误的 - 我理想情况下如果可能的话,想要保持依赖关系的分离吗?
有什么想法吗...?
PS。我与 Unity 没有任何联系,如果有另一个 IoC 库在这个平台上做得更好那就太好了 - 但 Unity 是我已经了解和喜爱的!最佳答案
我使用温莎城堡来做到这一点。您或许可以对 Unity 使用相同的方法:
- 仅当程序集需要在中定义的类型时才限制引用 另一个组件
- 通过实现 IWindsorInstaller 为每个程序集中的 IoC 配置定义一个类(或多个类,具体取决于您想要的组织方式),并使用已实现的
Install
方法中的 Fluent API 配置 DI。 - 在应用根目录中定义容器实例
- 在应用程序启动时,使用反射来查找所有实现
bin 文件夹中的 IWindsorInstaller 并运行其
Install
方法, 传入容器实例
这样您就可以将依赖项分开,并且不必担心添加额外的引用或添加 .dll 作为内容文件。
关于c# - 具有 IoC 的通用应用程序 : Dependency management/isolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127477/