3

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コンテナを直接注入することに戻りますか?サービスロケーターは一般的に不利になっているようですが、使用しないほうがいいでしょうか?ご協力いただきありがとうございます。

4

2 に答える 2

0

ServiceLocatorPrism + Silverlight 4 アプリケーションの単体テストを正常に実行できましたが、単体テストから使用できない理由が思いつきません。[TestInitialize]ただし、コードの一部でプリズムが正しく初期化されていることを確認する必要があります。

于 2011-04-21T19:01:42.367 に答える