具有 IoC 的通用应用程序:依赖性 management/isolation

Universal Apps with IoC: Dependency management/isolation

我非常喜欢将 Unity 用于 .NET 应用程序以在大型代码库中保留代码模块和依赖项 "manageable"。我在 .NET 中使用它多年,方法是将程序集放入主程序的程序目录并重新配置 IoC 配置文件(通常是 .exe.config 文件),将新行为注入程序而无需重新配置编译主程序。

但是,我已经开始尝试为 Windows Store 编写通用应用程序,更重要的是,Windows IoT - 但是因为这些应用程序在编译期间 "packaged up",我发现很难理解如何最好地继续这样做。

一个可能的选择是编译 "modules"(PCL/Universal class 库)并将它们(及其依赖项)作为 "Content" 文件包含在通用应用程序中, 然后在程序启动时通过反射使用反射从这些程序集中加载类型。

另一种选择是在编译之前将所有模块及其依赖项包含到主程序的项目引用中,但使用 "poor man's dependency injection to hard code the registrations and resolutions",但这对我来说真的是错误的 - 我希望保持分离依赖性是否可能?

有什么想法...?

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

我使用 Castle Windsor 进行此操作。您可能可以对 Unity 使用相同的方法:

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

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