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

Design patterns 温莎城堡和如何避免服务定位器模式?,design-patterns,castle-windsor,Design Patterns,Castle Windsor,我使用的是Castle Windsor,在大多数情况下,我通过类构造函数使用DI。然而,有时我发现自己使用服务定位器来解析类型的实例,我知道这是一种反模式。我相信你们也必须释放以这种方式解析的瞬态对象,因为温莎不会为你们这样做 一个示例场景是模拟电视遥控器的类。UI有几十个按钮,单击一个按钮将导致类实例化并执行特定的“命令”对象。通过构造函数注入所有这些具体命令显然是不可行的,因此我将使用服务定位器,类似这样:- private void PowerButtonOnClick() { v

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

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

private void PowerButtonOnClick()
{
    var command = ServiceLocator.Current.Resolve<IPowerOnCommand>();
    command.Execute();
}
private void powerbuttonnonclick()
{
var命令=ServiceLocator.Current.Resolve();
command.Execute();
}
我将如何重构代码以摆脱服务定位器,并确保在完成时释放瞬态类型(如果Windsor确实需要这样做的话)


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

我将使用与Windsor的组合。

不幸的是,我找不到一个好的“TypedFactoryFacility”代码示例。对于不能使用控制器注入(例如属性)的地方,最佳解决方案是什么。至少“工厂”应该通过属性中的服务定位器来解决。我在几年前写的一篇VSM文章中讨论了一点类型化工厂设施: