我需要创建一个附加属性,它与 PropertyChanged 事件处理程序中的某些服务进行通信。 E. g。
private static void IsRegisteredPropertyChanged(DependencyObject target,
DependencyPropertyChangedEventArgs e)
{
//how to resolve this without service locator?
IService someService = ServiceLocator.Resolve<IService>();
if ((bool)e.NewValue)
{
someService.Register(target);
}
else
{
someService.Unregister(target);
}
}
据我所知,事件处理程序将始终是静态的。除了Service Locator模式之外,有没有办法使用Unity为此事件处理程序注入依赖项?如果没有,那么可能有任何替代方法可以让您声明性地将视图元素注册到该服务吗?
答案 0 :(得分:1)
涉及static
关键字时进行正确DI的唯一方法是方法注入。
如果您可以通过其中一个方法参数注入服务,则可以执行此操作 - 否则您无法执行此操作。
您仍然可以使用服务定位器,但这不是DI ......