我正在尝试使用多个模块创建应用程序。我有一个单一模块的应用程序,但我们只是决定拆分。
我们创建了两个容器,第一个是moduleAContainer,第二个是moduleBContainer,我的意思是IOC容器(Castle)。
我们也有一个IoCWorker类负责保持特定容器的静态,并提供一些方法来解决。
我的问题是,使用Asp.net MVC的ControllerFactory,我怎么决定一个应该解决我的依赖?
应该是IocWorker.Resolve(“containername”),但每个网页请求?决定它的参数是什么?
我可以使用子容器吗?
非常感谢你。
答案 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进行抽象,因为幕后的实现方式都是不同的。