使用MEF导入的Autofac模块未加载

时间:2015-11-13 06:22:45

标签: mef autofac autofac-module

我有许多程序集,每个程序集都通过使用扩展Autofac.Module的类向Autofac提供依赖项。我已将每个装饰作为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 个答案:

答案 0 :(得分:0)

你可能无法以这种方式做你想做的事。

通过将零件目录与其中的模块一起注册,您将它们注册为组件,类似于任何其他依赖项。让它们退出的唯一方法是构建容器并解析InterBank::INTER_BANK_COMMISSION但是然后调用Load将不会在模块中注册东西,因为容器已经构建了。

如果您希望模块将注册贡献给容器,则必须直接向ContainerBuilder注册,而不是通过MEF集成注册。