我正在构建一个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容器吗?由于服务定位器似乎一般都不受欢迎,我最好不要使用它吗?谢谢你的帮助。
答案 0 :(得分:4)
您需要创建一个模拟IServiceLocator,在测试中使用模拟提供程序初始化服务定位器。
应该这样做。
答案 1 :(得分:0)
我能够成功地对Prism + Silverlight 4应用程序进行单元测试,并且无法想到为什么您不能使用单元测试中的ServiceLocator
。您需要确保在代码的[TestInitialize]
部分正确初始化棱镜。