Модули 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.

Другие вопросы по тегам