我正在使用Castle Windsor,在大多数情况下,我通过类构造函数使用DI。然而,有时我发现自己使用服务定位器来解析类型的实例,我知道这是一种反模式。我相信你也必须释放以这种方式解决的瞬态物体,因为温莎不会为你做这件事吗?
示例场景是一个模拟电视遥控器的类。 UI有几十个按钮,单击一个按钮会导致类实例化并执行特定的“命令”对象。通过构造函数注入所有这些具体命令显然是不可行的,所以我会使用服务定位器,如下所示: -
private void PowerButtonOnClick()
{
var command = ServiceLocator.Current.Resolve<IPowerOnCommand>();
command.Execute();
}
我如何重构我的代码以摆脱服务定位器,和确保在完成时释放瞬态类型(如果Windsor确实需要这样)?
(我意识到上面的场景可以使用“命令”设计模式来解决。这只是一个示例场景 - 还有其他情况我正在使用服务定位器。)