我正在構建一個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
不工作,大概是因爲棱鏡ISN」 t初始化爲我的測試。
可以在測試環境中使用ServiceLocator
嗎?我是否可以放棄它並直接返回注入IoC容器?由於服務定位器似乎普遍失寵,我最好不要使用它嗎?謝謝你的幫助。
事實證明,我偶然發現了一種反模式 - 其實就是其中的一種。注入容器可能不是一個好主意。 Se this thread:http://stackoverflow.com/questions/5761167/mocking-an-ioc-container – 2011-04-29 17:33:15