0

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

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

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

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

应该类似于 IocWorker.Resolve("containername") 但每个 Web 请求?我决定它的参数是什么?

我可以使用子容器吗?

太感谢了。

4

1 回答 1

0

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

因此,假设它是一个交付应用程序。

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

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

消费者,比如说 ISaleAppService,购买了服务,现在,假设消费者不关心正在使用哪个服务,Service(Module) A 或 B..

如果是这种情况,您需要另一个具有实现细节的服务来为用户做出决定,中介者.. IMediator。

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

如果消费者需要选择哪个服务(哪个模块),那么可能你可以提供key来区分,比如输入参数arg1。

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

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

于 2019-09-05T21:23:12.063 回答