我是Unity的新手,但这个问题对IoC更为通用,而且我对整体实施IoC也很陌生。我有这个项目结构的VS2010解决方案(稍微简化):
所有项目都引用DomainModel项目。
存储库引用DataAccess项目。
服务层引用存储库项目。
WebUI引用了服务项目& Unity程序集。
我已将Unity配置为在WebUI中正确地注入我的所有服务类型(global.asax通过自定义UnityControllerFactory.cs)。但是,如何在服务层中配置Unity以注入存储库对象?
我不想从WebUI引用Repository项目,以确保在开发期间没有一个快捷方式并绕过服务层。
我有几个想法(不确定它是否会解决它):
非常感谢任何方向,特别是如何为服务层/存储库配置Unity,以及一般有关项目的配置。
答案 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>();