多层应用程序中的依赖注入

Dependency Injection in multilayered Application

所以我的问题如下。我的解决方案包含以下项目(带参考):

好吧,现在我想使用依赖注入将我的 ViewModels 与服务和其他东西分离。因为我也在使用对话框,所以我还需要注入带有实现 DialogService 的 IDialogService。 现在,DialogService 使用一些仅在 Presentation 项目中的特定于 Presentation 的 DLL,因此我必须在 Presentation 项目中实现 IDialogService 接口,但 Unity-Container 位于应用程序层中。我想你能看出我的问题是什么:我只有从表示层到应用层的引用,而不是其他方式。

我这样做对吗?我该如何解决这个问题?

您缺少一个图层:Composition Root 图层。这是应用程序的最顶层,它引用应用程序中的所有其他层。您经常会看到该层与表示层放在同一个程序集中(这很好,因为层是逻辑工件,而程序集是物理工件)。然而,在 WPF 的情况下,很容易将所有 WPF 相关的东西移动到不同的程序集,让启动项目只包含将所有东西连接在一起的引导逻辑(带有容器)。

所以一般来说,你不应该让每个程序集负责它自己的布线,因为那样会导致对容器的不必要的依赖。通常只有组合根必须依赖于您的 DI 库。

另见 this related question