私はDIコンセプトを初めて使用し、構造マップを初めて使用しました。私はすべての私のインターフェイスがAssemblyA
にあり、私のすべての実装がAssemblyB
にあるシナリオをいっぱいにしようとしています。私はAssemblyA
にあり、CustomerService
クラスがassemblyB
であるAssemblyA
Structure Mapを使用した複数のアセンブリからの依存性注入
public class Customer(ICustomerService)
{
}
ICustomerService
からインターフェイスへの依存関係を持つコンストラクタでAssemblyB
クラスのインスタンスを注入するのStructureMapを使用したいです。私はこのコンストラクタにCustomerService
インスタンスを挿入するためにStructuremapを欲しいです。私は、クラス名が接頭辞の接頭辞の名前と同じで、かつI
であると仮定しています。 Structuremapはそれを自動的に認識します。
私は以下の構成を書いています。
x =>
{
x.Scan(scan =>
{
scan.Assembly("AssemblyA");
scan.Assembly("AssemblyB");
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
が、それは私にエラー
StructureMap Exception Code: 202
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
を任意の助けが参考になります提供します。私は、デフォルトの規則を使い、各インタフェースをクラスに登録しないようにしたい。
ありがとうございました。
私は何が起こっていたのか理解できました。私は、スキャンしていたさまざまなアセンブリでInterfaceを実装していた複数のクラスを持っていました。これは、私が質問で報告した元のエラーを生成します。すべてのスキャンアセンブリでSMのデフォルト条約を満たすクラスが1つしかない場合、質問に投稿したコードは正しく動作するはずです。それ以前にそれに慣れていないのは悪いですが、誰かが彼の頭を叩くのを助けることを願っています x.IncludeNamespace( "AssemblyA")を追加するとすぐに、基本的に私はSMのクラスアセンブリをフィルタリングし、それは動作を開始:) –