【问题标题】:IRepository, IService, Unity in an ASP.NET MVC Application, reference questionASP.NET MVC 应用程序中的 IRepository、IService、Unity,参考问题
【发布时间】:2011-04-29 06:04:19
【问题描述】:

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

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

所有项目都引用 DomainModel 项目。

存储库引用 DataAccess 项目。

服务层引用存储库项目。

WebUI 引用 Service 项目和 Unity 程序集。

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多