繁体   English   中英

将装饰好的Autofac组件导出到MEF

[英]Exporting decorated Autofac component to MEF

我正在将Autofac用作项目中的IoC容器。 我正在使用Autofac Mef集成库通过MEF将“插件”加载到我的容器中。 一切正常。

我还在一些服务上使用了装饰器模式,这使我头疼。 这就是我注册其中之一的方式:

builder.RegisterDecorator<IAuthorizationHandler>((context, handler) =>
                context.Resolve<CachedAuthManager>(new Parameter[] { new NamedParameter("manager", handler) }), "authhandler", "authcached");

现在,我希望将其中之一导出到MEF。 我不能像上面通常在容器构建器上那样,将上面示例中的扩展方法“ Exports”应用于构建器,例如以下示例:

builder.RegisterType<LogHandler>().As<ILogHandler>).Exported(x => x.As<ILogHandler>());

如何正确干净地告诉Autofac我已注册并装饰的组件将导出到MEF?

感谢您的帮助

我认为您已经找到了MEF-Autofac抽象类目当前无法解决的领域之一。

MEF在命名协定上工作非常繁重 ,也就是说(基本上)是类型到接口的已知映射。 您可以通过实际定义导出定义的方式看到这一点-带有命名合同和一些元数据。 您还可以在零件目录的工作方式中看到它-导入和导出定义,仅支持类型(装配体扫描,指定类型等)的目录。 它确实希望将接口映射为类型...,以便可以进一步将这些类型映射为命名合同并满足堆栈中的依赖链。

Autofac允许使用lambda,装饰器和注册源提供更多动态功能 支持接口的实际类型可以根据lambda的执行而改变; 装饰器就是一个例子。

Autofac / MEF桥接器会尽最大努力在内部使用命名服务和注册事件来伪造某些东西并使出口与进口排成一行……但是它不支持对诸如装饰器之类的动态注册执行此操作(实际上这很复杂)后端并使用注册资源来完成其工作)。

要使此功能正常工作,需要对Autofac内部进行几行代码更改……也就是说, 很抱歉,您目前不走运

如果这对您来说很重要,那么您可能要提出问题和/或提交拉取请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM