Единство в прикрепленных свойствах - PullRequest
3 голосов
/ 25 апреля 2011

Мне нужно создать вложенное свойство, которое взаимодействует с каким-либо сервисом внутри его PropertyChanged обработчика событий. Например,

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);
    }
}

Как я понимаю, обработчик событий всегда будет статическим. Есть ли способ внедрить зависимость для этого обработчика событий, используя Unity, кроме как с помощью шаблона Service Locator? Если нет, то, может быть, есть какие-то альтернативы, которые позволяют декларативно регистрировать элементы представления для этого сервиса?

1 Ответ

1 голос
/ 25 апреля 2011

Единственный способ сделать правильный DI, когда используется ключевое слово static, - это Внедрение метода .

Если вы можете внедрить сервис через один из параметров метода, вы можете сделать это - иначе вы не сможете.

Вы все еще можете использовать локатор службы, но это не DI ...

...