un problème peut-être simple, mais bizarre pourquoi je ne sais pas comment le faire:Unité dans les méthodes statiques
Unity (PRISM) et les méthodes statiques. Dans ce cas particulier, une méthode d'extension. Mais en général, comment puis-je accéder à une "instance fournie par unité" dans une méthode statique. Pensez par exemple d'un service de journalisation je veux accéder à la journalisation de certaines choses que je fais dans une méthode statique. Dois-je vraiment passer l'arbitre au service de journalisation lorsque je l'utilise?
Exemple (proche problème réel)
public static void HookupPrismEvent(ref UIElement, ILogger log) {...}
semble étrange, je pense que je manque somethings, comme Container.Resolve (de résolution statique). N'ont rien trouvé, mais le conteneur, l'unité ou le statique ne sont pas les meilleurs termes de recherche du monde. Peut-être que je devrais juste essayer, mais encore, il se sent un peu "étrange" ..
Donc, des commentaires sur comment et si utiliser DI dans les méthodes statiques?
Chris
EDIT - ok, approche actuelle après la réponse: EDIT2, après y avoir réfléchi, récipient enlevé, fournissant "ce besoin" ....
public static void AttachPrismEvents(this UIElement element, IEventAggregator eA)
{
var ev = eA.GetEvent<KeyPressedEvent>();
element.KeyDown += ((sender, e) => ev.Publish(e));
}
ou, avec l'exploitation forestière:
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));
}
Ok, je pense que je vais essayer de fournir le conteneur. Je modifie le post, peut-être jeter un oeil et dites-moi ce que vous en pensez. Merci, Chris ... –
J'ai mieux aimé votre proposition originale (c'est-à-dire en injectant l'ILogger). Cela délimite plus clairement la responsabilité de la méthode et prévient la «pollution responsable», et maintient également la méthode DI Container agnostique. –
Oui, mais dans ce cas, je devrais injecter IEventAggregator et ILogger. Peut-être plus si nécessaire. Peut-être que je fournis ma propre façade pour le conteneur comme IContainer ou similaire. Avoir à vérifier, PRISM devrait soutenir la commutation du conteneur de toute façon, laisse voir comment ils le font ... –