Как установить мою реализацию IServiceLocator как ServiceLocator.Current? - PullRequest
4 голосов
/ 12 апреля 2010

Я работаю над заменой Unity на Ninject в платформе Prism. Это требует от меня реализации специфического для Ninject IServiceLocator. Из того, что я понял, я могу унаследовать ServiceLocatorImplBase, поэтому я так и делаю. Теперь, как я могу установить это в качестве текущего ServiceLocator? Мне нужно это, чтобы иметь, например, RegionManager получает его при создании регионов и вызывает:

IServiceLocator locator = ServiceLocator.Current;

Это статическое свойство, но оно не имеет установщика. Есть функция:

void ServiceLocator.SetLocatorProvider(ServiceLocatorProvider newProvider);

.. но аргумент не соответствует моему ServiceLocatorImplBase. Есть идеи?

1 Ответ

4 голосов
/ 12 апреля 2010

ServiceLocatorProvider является делегатом, вы можете сделать это:

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

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