我正在使用温莎城堡,并且在大多数情况下,我是通过类构造函数使用DI的。但是,有时我发现自己使用服务定位器来解析类型的实例,我知道这是一种反模式。我相信您还必须释放以这种方式解析的 transient 对象,因为温莎不会为您这样做吗?

一个示例场景是模拟电视 Remote 的类。 UI有数十个按钮,单击一个会导致类实例化并执行特定的“命令”对象。通过构造函数注入(inject)所有这些具体命令显然是不可行的,因此我将使用服务定位器,如下所示:

private void PowerButtonOnClick()
{
    var command = ServiceLocator.Current.Resolve<IPowerOnCommand>();
    command.Execute();
}

我将如何重构代码以摆脱服务定位器,并确保完成后释放临时类型(如果Windsor确实需要这样做)?

(我意识到上述场景可以使用“命令”设计模式来解决。这只是一个示例场景-在其他情况下,我正在使用服务定位器)。

最佳答案

我将结合使用Factory Pattern和温莎的Typed Factory Facility

关于design-patterns - 温莎城堡如何避免服务定位器模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20195480/

10-10 16:36