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

Autofac Modules Imported with MEF not being Loaded

我有许多程序集,每个程序集都通过使用扩展 Autofac.Module 的 class 向 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 的一些用法,但(还)没有突然想到如何将其绑定到目录中。

谢谢!

r.

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

通过注册零件目录及其中的模块,您将它们注册为组件,类似于任何其他依赖项。让它们退出的唯一方法是构建容器并解析 IEnumerable<IModule>> 但是随后调用 Load 不会在模块中注册这些东西,因为容器已经构建。

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