重写MEF元数据属性上的ToString()

本文关键字:ToString MEF 数据属性 重写 | 更新日期: 2023-09-27 18:11:47

我有一个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?没有反射和动态,这可能吗?

感谢任何帮助!

重写MEF元数据属性上的ToString()

这是因为导出的元数据是一个视图,而不是元数据类的实例。它是一个实现元数据接口(IMyTest)的类,由MEF自动生成。因此,它没有MyTestAttributeToString实现。