Dependency injection 基于MEF和Autofac的元数据过滤

Dependency injection 基于MEF和Autofac的元数据过滤,dependency-injection,metadata,mef,autofac,Dependency Injection,Metadata,Mef,Autofac,我有一个测试MVC应用程序,它使用MEF作为插件管理器。在一些外部库中,我使用基于公共接口的MEF导出一组控制器: [Export(typeof(ICustomController)), PartCreationPolicy(CreationPolicy.NonShared)] [ExportMetadata("Feature", "Foo")] public class FooController : Controller, ICustomController { } 现在,我已将

我有一个测试MVC应用程序,它使用MEF作为插件管理器。在一些外部库中,我使用基于公共接口的MEF导出一组控制器:

 [Export(typeof(ICustomController)), PartCreationPolicy(CreationPolicy.NonShared)]
 [ExportMetadata("Feature", "Foo")]
 public class FooController : Controller, ICustomController
 {
 }
现在,我已将其连接到autofac中,以便可以执行以下操作:

var controllers = container.GetServices<ICustomController>();
var controllers=container.GetServices();
我遇到的问题是,我想对元数据值进行筛选。我知道autofac会强制您在构建器中执行此操作,而不是在您调用GetServices时执行此操作,因此我一直在那里挖掘。问题是导出是由MEF而不是autofac定义的,并且是通用的。以下是我想做的(注意这不起作用)

builder.RegisterType().Exported(x=>x.As().WithMetadata(“Feature”,“Foo”));
我意识到这在某种意义上是设置了一个新的类型注册。我想让它做的是意识到它已经有了这种类型的列表,当我要求它们时,只给我那些在元数据中具有“Foo”特性的列表

这可能吗?在注射被交给autofac之前,有没有办法在MEF中进行注射

builder.RegisterType<ICustomController>().Exported(x=> x.As<ICustomController>().WithMetadata("Feature", "Foo"));