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

时间:2015-05-08 06:38:31

标签: c# wpf mvvm dependency-injection unity-container

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

  • 表示层,包含视图(具有对应用层的引用)
  • 应用层,包含ViewModels(引用域和持久层)
  • 域层,包含所有模型(不参考任何内容)
  • 持久层,使用Entity Framework存储数据(对域层的引用)

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

我这样做是对的,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

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

另见this related question