Единство в присоединенных свойствах

#c# #dependency-injection #unity-container #attached-properties

#c# #внедрение зависимости #единство-контейнер #прикрепленные свойства

Вопрос:

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

 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:

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

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

Вы все еще можете использовать Service Locator, но это не DI…