ASP.NET MVC应用程序中的IRepository,IService,Unity,参考问题

时间:2010-10-22 15:49:49

标签: model-view-controller repository unity-container facade

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

  • Business Objects - 文件夹
    • DomainModel(Class Lib prj。) - 实体框架2 POCO实体
  • 数据层 - 文件夹
    • DataAccess(Class Lib prj。) - EF2 EDMX
    • Repository(Class Lib prj。) - IRepository接口&存储库具体实现
  • 表示层 - 文件夹
    • WebUI - MVC项目
  • 服务层
    • 服务(Class Lib prj。) - IService接口和服务(façade模式)具体实现

所有项目都引用DomainModel项目。

存储库引用DataAccess项目。

服务层引用存储库项目。

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

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

我不想从WebUI引用Repository项目,以确保在开发期间没有一个快捷方式并绕过服务层。

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

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

    非常感谢任何方向,特别是如何为服务层/存储库配置Unity,以及一般有关项目的配置。

1 个答案:

答案 0 :(得分:2)

在Service项目中添加某种类型的引导程序。然后在WebUI中引用引导程序。

执行此操作的一种方法是编写一个小型Unity扩展。像这样:

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

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

var container = new UnityContainer()
    .AddNewExtension<ServiceLayerBootstrap>();