在编辑器中使用MEF

时间:2010-12-14 18:15:54

标签: c# mef

我正在尝试开发像VS编辑器这样的编辑器,其中包括FTP,TelNet(拖放设计器并在PropertyGrid中相互连接它们等等)然后执行。最好使用MEF扫描所有具有接口IComponent的dll-s,然后使用反射从dll-s获取原始Object。示例

[Export(typeof(ICOmponent))]
[MetadataExport("Name", "FTP")]
public class FTP : ICOmponent
{
    public string Server { get; set; }
    public void Start()
    {
        ....ConectTOServer(Server);
    }
}
[Export(typeof(ICOmponent))]
[MetadataExport("Name", "MessageBox")]
public class MessageBox : ICOmponent
{
    public string Message { get; set; }
    public void Start()
    {
        System.Windows.Forms.MessageBox.Show(Message);
    }
}

public interface ICOmponent
{
    void Start();
}

或者是从ICOmponent获取MEF中的原始对象的另一种方法,例如从Metadata中获取原始对象。因为PropertyGrid是用于显示FTP服务器和From MessageBox消息的属性的真实对象。 抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

你的写作看起来很普遍,关于MEF这个来自微软Mike Taulty的视频系列可能有所帮助:“Learning about MEF in SL4 from Mike Taulty”;看这个系列不会浪费你的时间。

您可能更喜欢reading关于MEF。

答案 1 :(得分:0)

要使MEF正常工作,您应用程序上删除的任何程序集/ dll都必须实现Exports。如果没有,您将无法Import任何内容。

要使用没有任何导出的assembly / dll,请使用反射来搜索实现IComponent的类型。并使用Activator类从其类型信息创建实例。