设计模式 – 温莎城堡以及如何避免服务定位模式?

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

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

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

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

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

最佳答案 我会结合使用
Factory Pattern和Windsor的
Typed Factory Facility.

点赞