【发布时间】:2011-10-04 12:32:13
【问题描述】:
假设我的 MVC 2 项目中有以下类和接口:
存储库:
IRepository1、IRepository2、IRepository3
public class ConcreteRepository1 : IRepository1
{
public ConcreteRepository1()
{
...
}
...
}
public class ConcreteRepository2 : IRepository2
{
public ConcreteRepository2()
{
...
}
...
}
public class ConcreteRepository3 : IRepository3
{
public ConcreteRepository3()
{
...
}
...
}
服务类:
public class Service1
{
private IRepository1 repo1;
private IRepository2 repo2;
public Service1(IRepository1 repo1, IRepository2 repo2)
{
this.repo1 = repo1;
this.repo2 = repo2;
}
...
}
控制器:
public class Controller1 : Controller
{
private Service1 srv1;
private Service2 srv2;
public Controller1(Service1 srv1, Service2 srv2)
{
this.srv1 = srv1;
this.srv2 = srv2;
}
...
}
我有自定义的 ControllerFactory,并且我知道如何将具体的存储库绑定到接口:
IUnityContainer container = new UnityContainer();
container.RegisterType<IRepository1, ConcreteRepository1>(new TransientLifetimeManager(), new InjectionConstructor());
container.RegisterType<IRepository2, ConcreteRepository2>(new TransientLifetimeManager(), new InjectionConstructor());
container.RegisterType<IRepository3, ConcreteRepository3>(new TransientLifetimeManager(), new InjectionConstructor());
问题是我应该如何在我的自定义 ControllerFactory 中注册服务的实例和控制器的类型,以使统一容器解析整个层次结构 Controller->Service->Repository 并避免在控制器或服务中调用 Resolve?
谢谢。
【问题讨论】:
-
为什么你有多个存储库?您是否访问不同的数据源?只是好奇...
-
@Yves M.:我的域层中的每个聚合根都有一个存储库。我有一个数据源,但假设这种方法支持每个聚合根位于它自己的数据源上。
标签: c# .net asp.net-mvc asp.net-mvc-2 inversion-of-control