そのため、StructureMapを使用する.NETソリューションがあり、StructureMapに、そのソリューションのプロジェクトからインターフェイスを実装し、そのレジストリエントリを定義する外部アセンブリを読み取らせたいと考えています。
私のソリューションのStructreMap構成:
ObjectFactory.Initialize(registry =>
{
registry.Scan(assembly =>
{
assembly.TheCallingAssembly();
//Telling StructureMap to sweep a folder called "extensions" directly
//underneath the application root folder for any assemblies found in that folder
assembly.AssembliesFromPath("extensions", addedAssembly => addedAssembly.GetName().Name.ToLower().Contains("extension"));
//Direct StructureMap to add any Registries that it finds in these assemblies, assuming that all the StructureMap directives are
//contained in registry classes
assembly.LookForRegistries();
});
});
非常に簡単です。呼び出し元のアセンブリとアセンブリをディレクトリからアセンブリコレクションに追加するように指示します。アセンブリ変数をデバッグしましたが、実際にすべてのアセンブリ(extensionsディレクトリのアセンブリを含む)が見つかりました。
元のソリューションとは別に作成したDLLプロジェクトには、インターフェイスの実装があり(元のソリューションからインターフェイスプロジェクトを参照しています)、非常に単純なレジストリを作成しました。
public class ProductMockRegistry : Registry
{
public ProductMockRegistry()
{
ForRequestedType<IProductRepository>().AddInstances(repository =>
{
repository.OfConcreteType<ProductMockRepository>();
});
}
}
私が抱えている問題は、StructureMapが外部DLLでレジストリを見つけられないことです。DLLは問題なく検出されますが、LookForRegistriesに通知すると、検出されません。