在编辑器中使用 MEF

发布于 2024-10-08 02:12:28 字数 798 浏览 1 评论 0原文

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

[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 中获取原始对象的方法,就像从元数据中获取原始对象一样。因为 PropertyGrid 需要用于显示 FTP 服务器和来自 MessageBox 消息的属性的真实对象。 抱歉我的英语不好。

Im trying to developing editor like VS editor where i hawe components like FTP, TelNet (where you drag and drop in designer and connect them with each other change properties in PropertyGrid and so on) and then execute. Is good idea to use MEF to scan all dll-s that have interface IComponent and then use reflection to get the original Object from dll-s. example

[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();
}

Or is another method to get original object from MEF from ICOmponent like from Metadata.. because PropertyGrid nead real object for displaying properties for FTP Server and From MessageBox Message.
Sorry for my bad english.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

栀子花开つ 2024-10-15 02:12:28

为了使 MEF 正常工作,放置在应用程序上的任何程序集/dll 都必须实现 Exports。如果没有,您将无法导入任何内容。

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

For MEF to work, any assembly/dll that is dropped on you application must implement Exports. If it does not, you won't be able to Import anything.

To work with assembly/dll that does not have any exports, use reflection to search for types that implement IComponent. And use Activator class to create instances from their type information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文