我使用带有[Export]属性的MEF导出方法,我需要使用Container(使用GetExports获取方法)来使用此方法。 GetExports返回一个我不知道如何从中提取MethodInfo的ExportedDelegate对象。 使用调试器进行检查我认为它是一个私有属性,我很想用反射来提取它,但它并不是这样做的正确方法。
有什么想法吗?
此问题与this one不同。我没有尝试使用[导入],我必须从容器中获取并使用该方法。
答案 0 :(得分:0)
好的家伙,所以这是一个棘手的,但我要离开这里作为参考。
您所要做的就是将从MEF返回的值转换为ExportedDelegate并以正确的方式调用CreateDelegate:
这设置了我们想要的导入:
var importDefinition = new ImportDefinition(e => true, obj.GetType().FullName, ImportCardinality.ZeroOrMore, false, false);
var objectsWithMethods = container.GetExports(importDefinition)
.Where(x => x.Value is IYourInterface)
.Select(x => x.Value)
.ToList();
这将获取上面找到的对象的方法(使用objectsWithMethod在foreach中迭代objectsWithMethods):
var endPointsImportDefinition = new ImportDefinition(e => true, objectsWithMethod.GetType().FullName, ImportCardinality.ZeroOrMore, false, false);
var endPoints = container.GetExports(endPointsImportDefinition)
.Where(x => x.Value is ExportedDelegate)
.Select(x => x.Value)
.ToList();
最后要使用MethodInfo(允许你运行方法):
var endPointMethod = (endPoint as ExportedDelegate).CreateDelegate(typeof(Delegate)).GetMethodInfo();
也可能是:
var endPointMethod = (endPoint as ExportedDelegate).CreateDelegate(typeof(Delegate)).Method;
希望它对任何人都有帮助!