Модули Autofac, импортированные с MEF, не загружаются
У меня есть несколько сборок, каждая из которых предоставляет свои зависимости для Autofac посредством использования класса, расширяющего Autofac.Module. Я украсил каждый из них как экспорт MEF, например:
[Export(typeof(IModule))]
public class ContainerModule : Module
{
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
}
}
В рамках запуска клиентского приложения я собираю все эти модули, например:
var builder = new ContainerBuilder();
var path = "Path to application Bin directory";
var catalog = new DirectoryCatalog(path, "MyApp*.dll");
builder.RegisterComposablePartCatalog(catalog);
container = builder.Build();
Просматривая каталог, я вижу все модули из всех сборок присутствующих.
У меня вопрос, как мне тогда дать Autofac команду вызывать метод Load на каждом из загруженных модулей?
Я думаю о некотором использовании builder.RegisterAssemblyModules, но у него (пока) не было момента, как связать это с каталогом.
Спасибо!
р.
1 ответ
Вы, вероятно, не сможете делать то, что вы хотите таким образом.
Регистрируя каталог деталей с модулями в нем, вы регистрируете их как компоненты, аналогично любой другой зависимости. Единственный способ вернуть их обратно - это построить контейнер и решить IEnumerable<IModule>>
но затем вызов Load не зарегистрирует материал в модулях, потому что контейнер уже собран.
Если вы хотите, чтобы модули вносили свои регистрации в контейнер, вы должны зарегистрировать их непосредственно в ContainerBuilder, а не через интеграцию MEF.