Я создаю приложение Prism 4 и использую ServiceLocator
для создания экземпляров объектов. ServiceLocator
вызывает проблемы с модульным тестированием, и это заставляет меня задуматься, стоит ли мне возвращаться к внедрению контейнера IoC в каждый класс, который в этом нуждается.
Вот пример проблемы из базового класса репозитория:
protected RepositoryBase(string filePath, Type contextType, string edmName)
{
m_Logger = ServiceLocator.Current.GetInstance<ILoggerFacade>();
// Log invocation
m_Logger.Log("RepositoryBase constructor invoked.", Category.Info, Priority.None);
// Create object context
...
// Log completion
m_Logger.Log("RepositoryBase constructor completed.", Category.Info, Priority.None);
}
Я создаю модульные тесты для своего репозитория и обнаружил, что ServiceLocator
не работает, предположительно, потому что Prism не инициализирован для моего теста.
Может ли ServiceLocator
использоваться в контексте тестирования? Могу ли я бросить его и вернуться к непосредственному введению контейнера IoC? Так как сервисные локаторы, похоже, вообще не пользуются популярностью, было бы лучше не использовать их? Спасибо за вашу помощь.