Итак, у меня есть решение .NET, которое использует StructureMap, и я хотел бы, чтобы 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();
});
});
Довольно просто, я советую добавить вызывающую сборку и сборку из каталога в коллекцию сборок. Я отладил переменную сборок, и она действительно нашла все сборки (в том числе из каталога расширений).
В проекте DLL, который я создал отдельно от моего исходного решения, у меня есть реализация интерфейса (я ссылался на проект интерфейсов из моего исходного решения) и написал очень простой реестр:
public class ProductMockRegistry : Registry
{
public ProductMockRegistry()
{
ForRequestedType<IProductRepository>().AddInstances(repository =>
{
repository.OfConcreteType<ProductMockRepository>();
});
}
}
Проблема в том, что StructureMap не находит реестр во внешней DLL. Он находит DLL просто отлично, но когда я говорю об этом LookForRegistries, он не находит ее.