【问题标题】:DI Unity in multiple projects - best practises多个项目中的 DI Unity - 最佳实践
【发布时间】:2016-09-30 10:41:03
【问题描述】:

我有一个问题。我在通用解决方案中有带有 Unity DI 容器、库项目和 WCF 项目的 WPF 项目。在 WCF 库中是从数据库读取的服务。 UserManager 在构造函数中设置,但是这有一个错误。

我的问题是统一容器必须在解决方案中的每个项目中,或者我可以配置一个统一容器,以便它在整个解决方案中找到依赖关系?

我的容器配置如下:

var container = new UnityContainer();
container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMappings.FromMatchingInterface, 
    WithName.Default);

但它不解决 WCF 应用程序中的依赖关系。

【问题讨论】:

  • 你只需要一个容器。
  • 谢谢。整个解决方案只有一个容器?我的容器配置如下: var container = _container ?? (_container = new UnityContainer()); container.RegisterTypes(AllClasses.FromLoadedAssemblies(), WithMappings.FromMatchingInterface, WithName.Default);但不要向 WCF 应用程序注入依赖项。
  • 如果 WCF 项目位于远程服务器上,而 WPF 应用程序位于客户端上,那么每一方都需要一个容器。
  • 谢谢,这实际上是合乎逻辑的。但是如何为统一配置 WCF 应用程序呢?在WPF中在App.xaml.cs中创建UnityContainer实例,WCF在哪里配置容器?
  • 这篇 MSDN 文章展示了如何在 WCF 中使用 Unity:msdn.microsoft.com/en-us/library/hh323725(v=vs.100).aspx

标签: wpf wcf dependency-injection unity-container


【解决方案1】:

必须在解决方案中的每个项目中都有统一容器,否则我可以配置一个统一容器,以便它在整个解决方案中找到依赖关系?

两者都没有。您通常会让每个启动项目创建自己的容器,并配置其依赖项。由于您有多个启动项目(Web 服务和桌面应用程序),您将有多个配置容器的位置。这与Composition Root 的概念有关。另请查看Composition Root reuse 了解更多详情。

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2010-09-27
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2011-03-21
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多