我有一个MEF MetadataAttribute:
[MetadataAttribute]
[AttributeUsage]
public class MyTestAttribute : ExportAttribute, IMyTest
{
public MyTestAttribute(string pluginInfo)
{
_pluginInfo = pluginInfo;
}
string _pluginInfo;
public string PluginInfo{get{return _pluginInfo;}}
public override string ToString()
{
return PluginInfo;
}
}
public interface IMyTest
{
string PluginInfo{get;}
}
我有一些继承自其他接口的其他元数据属性。我的所有属性都会覆盖ToString()
。我使用下面的方法来获取插件:
public void GetPlugins<TSender, TEventArgs, TAttributeMetadata>()
{
var importedPlugins = _container.GetExports<Action<TSender, TEventArgs>, TAttributeMetadata>(contract);
foreach(var plugin in importedPlugins)
{
string pluginInfo = plugin.Metadata.ToString();//this here is not
//returning plugin info. It is returning some kind of Guid and the interface name
//I could retrieve the pluginInfo via reflection but I don't want.
}
}
我的问题是为什么ToString()
没有返回pluginInfo?我该怎么做才能获得pluginInfo?是否有可能没有反思或动态?
任何帮助表示赞赏!
答案 0 :(得分:1)
这是因为导出的元数据是视图而不是元数据类的实例。它是一个实现元数据接口(IMyTest
)的类,由MEF自动生成。因此,它没有ToString
的{{1}}实现。