温莎城堡和如何避免服务定位模式?

时间:2013-11-25 14:24:13

标签: design-patterns castle-windsor

我正在使用Castle Windsor,在大多数情况下,我通过类构造函数使用DI。然而,有时我发现自己使用服务定位器来解析类型的实例,我知道这是一种反模式。我相信你也必须释放以这种方式解决的瞬态物体,因为温莎不会为你做这件事吗?

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

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

我如何重构我的代码以摆脱服务定位器,确保在完成时释放瞬态类型(如果Windsor确实需要这样)?

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

1 个答案:

答案 0 :(得分:2)

我会使用Factory Pattern和Windsor Typed Factory Facility的组合。