Castle を使用してテスト プロジェクト (TFS 2008) で依存関係の注入を行うにはどうすればよいですか?
-
01-07-2019 - |
質問
テスト プロジェクトで依存関係の注入に Castle Windsor を使用しています。「リポジトリ」クラスのインスタンスを作成しようとしています。「私のマシンでは正常に動作します」が、TFS で夜間ビルドを実行すると、テストで上記のクラスを読み込むことができません。
private static readonly WindsorContainer _container = new WindsorContainer(new XmlInterpreter());
public void MyTestInitialize()
{
var testRepository = (IBogusRepository)_container[typeof(IBogusRepository)];
}
XML 設定:
<castle>
<components>
<component id="primaryBogusRepository" type="Example2008.Repository.LALALALALA, Example2008.Repository" service="Example2008.Domain.Repository.IBogusRepository, Example2008.Domain" />
<component id="primaryProductRepository" type="Example2008.Repository.ProductRepository, Example2008.Repository" service="Example2008.Domain.Repository.IProductRepository, Example2008.Domain" />
</components>
</castle>
新しいビルドをキューすると、次のメッセージが生成されます。
クラスのインスタンスを作成できません。エラー:System.Configuration.ConfigurationException:タイプ名example2008.repository.lalalala、example2008.repositoryを見つけることができませんでした。
castle.windsor.installer.defaultComponentInstaller.obtaintaller.obtaintype(string typename)chatcher.windsor.installer.defaultComponentInstaller.setUpComponents(] iconfiguration []構成、iWindSorcontainer contater 、iconfigurationstore store)castle.windsor .windsorcontainer.runinstaller()castle.windsor.windsorcontainer..ctor(iconfigurationinterpreter interpreter)例19行目
このメッセージから、私の構成は正しいようです(具象クラス「LALALALALA」をインスタンス化したいことがわかります。そのため、xml 構成は明らかに正しく赤になっています)。
依存関係も正しく設定されていると思います (ソリューションをクリーンアップして再構築した場合でも、ローカルで動作するため)。
何かご意見は?
(ちなみに、VS2008、TFS 2008.Net 3.5、Castle 1.03を使用)
解決
それは興味深い。見つけました あなたの問題を解決するかもしれないこのブログ投稿。MSTest はそれを作業ディレクトリとして使用しているようですが、控えめに言っても迷惑です。このブログ投稿では、一貫した結果を得るためにディレクトリを変更する方法を示しています。また、より洗練されたソリューションが存在するかどうかを調べるために、グーグル検索も行ってみます。
他のヒント
リポジトリ実装を保持するアセンブリが bin ディレクトリ (またはビルドの実行ディレクトリがある場所) に見つからないようです。
まず、アセンブリがビルド サーバーの実行ディレクトリに存在するかどうかを確認します。
存在する場合は、アセンブリのバージョンが正しいことを確認します。同じ名前空間などにリポジトリ実装があります。
ビルドサーバーが、VS が実行/構築されている場所とは別の場所でオブジェクトを実行/構築している可能性があります。