возможно простая проблема, но странно, почему я понятия не имею, как это сделать:
Unity (PRISM) и статические методы. В этом особом случае метод расширения. Но в целом, как мне получить доступ к «единственному экземпляру» в статическом методе. Подумайте, например, службы ведения журналов Я хочу получить доступ к журналу некоторые вещи, которые я делаю внутри статического метода. Действительно ли я должен передать ссылку в службу регистрации при ее использовании?
Пример (близко к реальной проблеме)
public static void HookupPrismEvent(ref UIElement, ILogger log) {...}
Кажется странным, я думаю, что мне чего-то не хватает, например Container.Resolve (статическое разрешение). Ничего не нашли, но контейнер, единство или статичность - не лучшие поисковые термины в мире. Возможно, я должен просто попробовать это, но все же, это выглядит как-то "странно" ..
Итак, есть ли комментарии по поводу того, КАК и ЕСЛИ использовать DI в статических методах?
Chris
РЕДАКТИРОВАТЬ - хорошо, текущий подход после ответа:
EDIT2, подумав об этом, убрал контейнер, предоставив «что нужно» ....
public static void AttachPrismEvents(this UIElement element, IEventAggregator eA)
{
var ev = eA.GetEvent<KeyPressedEvent>();
element.KeyDown += ((sender, e) => ev.Publish(e));
}
или с регистрацией:
public static void AttachPrismEvents(this UIElement element, ILogger log, IEventAggregator eA)
{
log.Debug("Doing stuff");
var ev = eA.GetEvent<KeyPressedEvent>();
element.KeyDown += ((sender, e) => ev.Publish(e));
}