如何使用IOC容器管理多个模块

时间:2013-07-29 19:12:29

标签: dependency-injection inversion-of-control castle-windsor

我正在尝试使用多个模块创建应用程序。我有一个单一模块的应用程序,但我们只是决定拆分。

我们创建了两个容器,第一个是moduleAContainer,第二个是moduleBContainer,我的意思是IOC容器(Castle)。

我们也有一个IoCWorker类负责保持特定容器的静态,并提供一些方法来解决。

我的问题是,使用Asp.net MVC的ControllerFactory,我怎么决定一个应该解决我的依赖?

应该是IocWorker.Resolve(“containername”),但每个网页请求?决定它的参数是什么?

我可以使用子容器吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

让我尝试针对两个模块(模块A和B,它们都运行相同的服务接口ISaleAppService)具有相同接口(IUnitOfWork)且具有不同实现细节实体类的情况提出解决方案。

所以我们说这是一个交付应用程序。

模块A使用摩托车交付 DeliveryServiceA:IUnitOfWork {//使用摩托车尽快交付

模块B使用卡车交付 DeliverServiceB:IUnitOfWork {//使用卡车尽可能多地交付}

消费者(例如ISaleAppService)购买了服务,现在,消费者使用的是Service(Module)A或B,这与消费者无关。

在这种情况下,您需要另一个具有实现细节的服务来为用户(即Mediator .. IMediator)做出决定。

消费者请求=> IMediator确定要使用的服务=>在服务A或B(模块A或B)之间进行选择。

如果使用者需要选择哪个服务(哪个模块),那么您可能可以提供区分输入的键,例如输入参数arg1。

通过IUnitOfWork带有键(arg1或枚举)的消费请求=> IUnitOfWork根据键(或枚举)确定选择哪个实现块(模块A或模块B)发送请求。

无论您采用哪种设计,我都认为需要使用中间步骤,无论您如何使用IUnitOfWork进行抽象,因为幕后的实现方式都是不同的。