2010-04-12 9 views
4

Je travaille sur le remplacement de Unity par Ninject dans le framework Prism. Cela m'oblige à implémenter un IServiceLocator spécifique à Ninject. D'après ce que j'ai compris, je peux hériter de ServiceLocatorImplBase à la place, c'est ce que je fais. Maintenant, comment puis-je définir ceci comme Current ServiceLocator? J'ai besoin de cela pour avoir, par exemple, le RegionManager obtenir quand il crée des régions, et appelle:Comment définir mon implémentation IServiceLocator en tant que ServiceLocator.Current?

IServiceLocator locator = ServiceLocator.Current; 

Ceci est une propriété statique, mais il ne dispose pas d'un setter .. Il y a une fonction:

void ServiceLocator.SetLocatorProvider(ServiceLocatorProvider newProvider); 

..mais l'argument ne correspond pas à mon ServiceLocatorImplBase. Des idées?

Répondre

4

Le ServiceLocatorProvider est un délégué, vous pouvez le faire:

var container = NInjectServiceLocator(); // your ServiceLocatorImplBase impl. 

ServiceLocator.SetLocatorProvider(() => container); 
+0

Merci! Fonctionne parfaitement! – stiank81

+0

Si vous voulez savoir quel est l'avantage de la méthode 'SetLocatorProvider' sur une méthode de réglage' Current', lisez cette discussion: http://commonservicelocator.codeplex.com/Thread/View.aspx?ThreadId=50463. – Steven