使用MEF和Autofac基于元数据进行过滤

时间:2015-02-06 01:12:32

标签: dependency-injection metadata mef autofac

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

 [Export(typeof(ICustomController)), PartCreationPolicy(CreationPolicy.NonShared)]
 [ExportMetadata("Feature", "Foo")]
 public class FooController : Controller, ICustomController
 {
 }

现在我把它连接到autofac,以便我可以这样做:

var controllers = container.GetServices<ICustomController>();

我遇到的问题是我想过滤元数据值。我知道autofac强迫你在构建器中执行此操作,而不是在调用GetServices时,所以我一直在那里挖掘。问题是导出是由MEF定义的,而不是autofac,它是通用的。这是我想要做的(注意这不起作用)

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

我意识到这在某种意义上设定了新的类型注册。我想要它做的是意识到它已经有一个这种类型的列表,当我要求它们时,只给我那些在元数据中具有“Foo”功能的那些。

这甚至可能吗?在注射到autofac之前,有没有办法在MEF中进行?

0 个答案:

没有答案