Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多层应用中的依赖注入_C#_Wpf_Mvvm_Dependency Injection_Unity Container - Fatal编程技术网

C# 多层应用中的依赖注入

C# 多层应用中的依赖注入,c#,wpf,mvvm,dependency-injection,unity-container,C#,Wpf,Mvvm,Dependency Injection,Unity Container,所以我的问题如下。我的解决方案包含以下项目(带参考): 表示层,包含视图(引用应用层) 应用程序层,包含ViewModels(引用域和持久性层) 域层,包含所有模型(不引用任何内容) 持久层,使用实体框架存储数据(参考域层) 好了,现在我想使用依赖注入将ViewModels与服务和其他东西解耦。因为我也在使用dialogs,所以我还需要将IDialogService与实现DialogService一起注入。 现在,DialogService使用了一些特定于表示的DLL,它们只在表示项目中,因

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

  • 表示层,包含视图(引用应用层)
  • 应用程序层,包含ViewModels(引用域和持久性层)
  • 域层,包含所有模型(不引用任何内容)
  • 持久层,使用实体框架存储数据(参考域层)
好了,现在我想使用依赖注入将ViewModels与服务和其他东西解耦。因为我也在使用dialogs,所以我还需要将IDialogService与实现DialogService一起注入。 现在,DialogService使用了一些特定于表示的DLL,它们只在表示项目中,因此我必须在表示项目中实现IDialogService接口,但Unity容器位于应用程序层。我想你可以看到我的问题所在:我只有一个从表示层到应用层的引用,而不是相反


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

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

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


另请参见。

您的第一个项目符号点表示您的表示层引用了应用层,但问题的最后一行表示您只引用了应用层到表示层。对吗?对不起,那是个错误。我刚刚纠正了它。谢谢:-)@romblu不管你有什么问题,这是正确的方法。