2

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

但是,我已经开始着手为 Windows 应用商店以及更重要的 Windows IoT 编写通用应用程序——但是由于这些应用程序在编译过程中被“打包”,我发现很难理解如何最好地继续这样做。

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

另一种选择是在编译之前将所有模块及其依赖项包含到主程序的项目引用中,但使用“穷人的依赖注入对注册和解决方案进行硬编码”,但这对我来说真的是错误的——我最好保留如果可能的话,分离依赖关系?

有任何想法吗...?

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

4

1 回答 1

2

我使用温莎城堡来做到这一点。您可能可以对 Unity 使用相同的方法:

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

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

于 2015-05-08T15:58:16.480 回答