0

我是 Unity 的新手,但这个问题对 IoC 来说更通用,而且我对整体实现 IoC 还是很陌生。我有这个项目结构的VS2010解决方案(稍微简化):

  • 业务对象 - 文件夹
    • DomainModel (Class Lib prj.) – Entity Framework 2 POCO 实体
  • 数据层 - 文件夹
    • DataAccess (Class Lib prj.) – EF2 EDMX
    • Repository (Class Lib prj.) – IRepository 接口和存储库具体实现
  • 表示层 - 文件夹
    • WebUI – MVC 项目
  • 服务层
    • Service (Class Lib prj.) – IService 接口和服务(外观模式)具体实现

所有项目都引用 DomainModel 项目。

存储库引用 DataAccess 项目。

服务层引用存储库项目。

WebUI 引用服务项目和 Unity 程序集。

我已将 Unity 配置为在 WebUI 中正确注入我的所有服务类型(通过自定义 UnityControllerFactory.cs 的 global.asax)。但是如何在服务层配置 Unity 以注入存储库对象?

我不想从 WebUI 中引用 Repository 项目,以确保在开发过程中没有任何快捷方式并绕过服务层。

我有几个想法(不确定它是否会解决它):

  1. 将 IRepository 接口移动到 DomainModel 并为 IRepository 添加 Unity.RegisterType<> 调用
  2. 在 Web.config 中设置 Unity 配置

任何方向都将不胜感激,特别是如何为服务层/存储库配置 Unity,以及关于项目的一般情况。

4

1 回答 1

2

在服务项目中添加某种引导程序。然后在 WebUI 中引用引导程序。

一种方法是编写一个小的 Unity 扩展。像这样的东西:

public class ServiceLayerBootstrap : UnityContainerExtension
{
    protected override void Initialize()
    {
        Container.RegisterType<IRepository, WhateverRepositoryImplementation>();
        // etc.
    }
}

然后,在您创建容器并对其进行初始化的 Web 项目中,执行以下操作:

var container = new UnityContainer()
    .AddNewExtension<ServiceLayerBootstrap>();
于 2010-10-22T22:41:21.023 回答