如何正确构建服务以使用Windsor?

时间:2010-11-23 13:30:01

标签: inversion-of-control castle-windsor

class CustomService(IProcessor processor) : ICustomService

CustomService具有将被注入的依赖项。 IProcessor有多种实现方式。应该使用哪种实现由存储在当前用户的数据库中的设置确定。

首先,我考虑实现一个IHandlerSelector,它将从数据库中检索设置并确定要使用的实现。但是对于数据库中缺少设置等情况存在业务逻辑....由于存在业务逻辑,我不确定将其放在IHandlerSelector中是否正确。

我考虑创建另一个名为TopService的类:

class TopService(ISettingsProvider provider, IProcessorFactory procFactory, ICustomServiceFactory serviceFactory)

TopService使用两个类型的工厂。它将使用ISettingsProvider从数据库中检索设置,并使用IProcessorFactory来解析相应的IProcessor。得到正确的IProcessor后,我会使用ICustomServiceFactory工厂来解析CustomService

然而,这对我来说似乎有点不对劲。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

为什么不将IProcessorFactory传递到CustomerService课程?这仍然会将您的CustomerService课程与IProcessorFactory的实施隔离开来。这样,如果您的业务逻辑选择了将来更改的IProcessor,您可以创建一个新的IProcessorFactory

我会想象它是这样的:

public interface IProcessorFactory {
     IProcessor GetProcessor();
     IProcessor GetProcessor(string processorType);
}

然后在CustomerService课程中,可以根据是否为客户提供设置来调用正确的GetProcessor()方法。