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

Dependency injection 如何使用IOC容器管理多个模块,dependency-injection,inversion-of-control,castle-windsor,Dependency Injection,Inversion Of Control,Castle Windsor,我正在尝试使用多个模块创建一个应用程序。我有一个只有一个模块的应用程序,但我们决定分开 我们创建了两个容器,第一个是ModuleContainer,第二个是ModuleContainer,我是说IOC容器(Castle) 我们也有一个IoCWorker类,负责保持特定容器的静态,并提供一些解决方法 我的问题是,以Asp.net MVC的ControllerFactory为例,我该如何决定应该如何解决我的依赖关系 应该是类似于IocWorker.Resolve(“containername”)的东

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

我们创建了两个容器,第一个是ModuleContainer,第二个是ModuleContainer,我是说IOC容器(Castle)

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

我的问题是,以Asp.net MVC的ControllerFactory为例,我该如何决定应该如何解决我的依赖关系

应该是类似于IocWorker.Resolve(“containername”)的东西,但是根据web请求?决定它的参数是什么

我可以使用子容器吗


非常感谢。

让我试着为您的两个模块(模块a和B,通过它们运行相同的服务接口IsAlappService的方式)提供一个解决方案,它们具有相同的接口(IUnitOfWork),具有不同的实现细节

假设这是一款送货应用程序

模块A使用摩托车进行交付 DeliveryServiceA:i工作单元{//使用摩托车尽快交付}

模块B使用卡车运输 DeliverServiceB:IUnitOfWork{//使用卡车交付尽可能多的货物}

消费者,比如说IsAlappService,购买了服务,现在,让我们说消费者不关心使用哪种服务,服务(模块)a或B

如果是这样的话,您需要另一个具有实现细节的服务来为用户mediator做出决策。。IMediator

使用者请求=>IMediator确定使用哪个服务=>在服务A或B(模块A或B)之间选择

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

通过IUnitOfWork=>IUnitOfWork使用键(arg1或enum)的使用者请求根据键(或enum)确定要选择哪个实现块(模块A或模块B)来发送请求


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

您所谈论的“模块”概念是什么,为什么要使用两个单独的容器实例?请确保您理解的概念。我谈论的是同样的系统。每个模块都使用相同的数据库,但是,例如,我有这些服务,分别是模块A的IsAlappService和模块B的IsAlappService。我有一个接口IUnitOfWork,这两个模块共享,但问题是我实现IUnitOfWork的上下文不同。因此,仅使用一个容器,我如何执行以下操作:嘿,Ioc,如果名称空间来自moduleA,则使用moduleA上下文的具体实例解析IUnityOfWork,如果ModuleB使用ModuleB的具体实例执行相同的操作。但它们使用的是相同的IOC容器。