我在哪里放置Unity配置文件?

时间:2010-12-29 18:56:45

标签: c# unity-container

在3层Windows应用程序中,我将在哪里放置包含统一配置的配置文件? 如果它位于前层,那么我是否需要在我的所有前端,业务和数据层项目中引用unity.dlls,以便项目识别IUnityContainer接口等?

我将在哪里加载配置容器?它会在前层的主方法或数据层中,还是在需要时加载容器?

如果所有内容都放在前层,那么整个项目不依赖于前层,如果我将前层从Windows App更改为Web应用程序,那么我必须再次进行统一工作!

2 个答案:

答案 0 :(得分:8)

Unity或任何其他IoC容器,除了应用程序的初始引导之外,不应该在应用程序中扮演角色。它强调不应该进入业务和数据层。

因此,您使用Unity在Main中引导应用程序,然后完成Unity。除此之外,不要让Unity触及应用程序的任何其他部分。

以下是对此主题的详细说明:How I use Inversion of Control containers和后续行动Pulling from the container

  

如果所有内容都放在前层,那么整个项目不依赖于前层,如果我将前层从Windows App更改为Web应用程序,那么我必须再次进行统一工作!

如果您已正确设置,则不会。您不需要Unity来解析应用程序的组件。 Unity和其他IoC容器只是解决该问题的非常有用的工具。您应该首先编写您的应用程序,以便不需要Unity。然后,您可以轻松插入Unity或其他IoC容器,以解析应用程序需要运行的组件。

依赖注入的三个R

  1. 注册
  2. 解决
  3. 推出
  4. 注册是在您设置容器时。当您的应用程序在Main中启动时会发生这种情况。解决方法是解析应用程序的根组件。这就是使应用程序的核心组件协同工作的原因。释放是指应用程序退出并卸下容器以便正确释放组件。请注意,容器永远不会永远不会进入您的应用程序。

答案 1 :(得分:1)

这完全取决于您是在前层使用Unity还是仅在中/后层使用Unity。 如果您只在后端使用Unity,那么您可以将Unity配置文件放在与后端可执行文件相同的目录中。 如果您还在前端使用Unity,您可能会发现需要配置文件的第二个副本,前端可执行,因为它独立于后端。

Jason关于仅在引导方法中引用Unity的建议是很好的建议 - 因此配置文件将需要在与激活引导的服务器可执行文件相同的目录中和/或在激活引导的客户端可执行文件的目录中自举。

在我目前使用的系统中,我们在客户端和服务器中使用相同的引导代码(在中间层DLL中),因为我们在两者中使用IoC。这意味着客户端EXE和我们的服务器EXE都需要单独的配置副本。