使用IoC的通用应用程序:依赖管理/隔离

时间:2015-05-08 15:27:04

标签: c# windows-store-apps portable-class-library win-universal-app iot

我非常喜欢使用Unity for .NET应用程序来保持代码模块和依赖关系"可管理"在大型代码库中。通过将程序集放入主程序的程序目录并重新配置IoC配置文件(通常是.exe.config文件),我已经将它用于.NET多年,将新行为注入到程序中需要重新编译主程序。

然而,我已经开始尝试为Windows应用商店编写通用应用程序,更重要的是,Windows IoT - 但是因为这些应用程序被打包并且#34;在编辑过程中,我发现很难理解如何最好地继续这样做。

一种可能的选择是编译"模块" (PCL /通用类库)并将它们(和它们的依赖项)包括在内,作为"内容"通用应用程序中的文件,然后使用反射通过反射启动程序期间从这些程序集加载类型。

另一个选择是在编译之前将所有模块及其依赖项包含到主程序的项目引用中,但使用"穷人的依赖注入来硬编码注册和解决方案" ,但这对我来说确实是错的 - 如果可能的话,我最好还是要保持依赖关系的分离?

任何想法......?

PS。我没有以任何方式与Unity联系,如果有另一个IoC库在这个平台上做得更好那么好 - 但Unity是我已经知道和喜欢的!

1 个答案:

答案 0 :(得分:1)

我使用Castle Windsor这样做。您可以在Unity中使用相同的方法:

  • 仅限于程序集需要定义的类型时的引用 另一个集会
  • 通过实现IWindsorInstaller并使用实现的Install方法中的fluent API配置DI,为每个程序集中的IoC配置定义一个类(或类,具体取决于您希望如何组织)。
  • 在应用根目录中定义容器实例
  • 在应用程序启动时,使用反射来查找所有实现的类型 bin文件夹中的IWindsorInstaller并运行他们的Install方法, 传递容器实例

通过这种方式,您可以将依赖项分开,并且不必担心添加额外的引用或将.dll添加为内容文件。