#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…