MEF:查找延迟导入的类型

时间:2012-02-22 09:17:40

标签: mef

我使用了InheritedExport属性,并拥有一个对象树。想想IMessageSender,我有SmtpSender,TextSender,HttpPostSender。但是通过装饰器模式,我还有其他类也继承了这个MEF InheritedExport属性。

但是在编写发件人时,我不想要装饰器。 现在懒惰可以提供帮助,而我只检索不属于Decorator类型的对象。但我不能问懒惰实际上是什么。元数据可能有所帮助,但元数据仅适用于具有此元数据的对象。我不想强迫实施者(阅读:开发人员)将正确的元数据添加到他们的装饰者或发送者。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码获取Lazy成员的类型:

.GetType().GetProperty("Value").PropertyType

答案 1 :(得分:0)

我需要做类似的事情。最后,我选择添加元数据,这些元数据为我提供了所需的信息,但我可以看到为什么这不适合您。

另一种可能性是从使用自动导入到属性切换,并显式调用CompositionService.GetExports。然后,您最终得到IEnumerableExport个对象。这将使您获得合同名称(通常,但不总是,类型名称)和合同元数据。我认为合同元数据总是包含类型名称,因此您可以获得所需的信息。