【问题标题】:How to pass an object from a main form to a plugin in C#如何将对象从主窗体传递到 C# 中的插件
【发布时间】:2012-03-02 04:42:31
【问题描述】:

我有一个 Windows 应用程序(C#、.Net 4.0)。此 Windows 应用程序是基于插件的。我想将一个对象从主应用程序传递给一个插件。

有人愿意给我举个例子吗? .

【问题讨论】:

标签: .net winforms c#-4.0


【解决方案1】:

你应该问这个很有趣,我现在正在做类似的事情。

在您为插件定义的接口中,提供一个方法/属性,即插件可以使用的应用程序接口。

然后在您的应用程序中实现该接口。

现在在你的插件上调用你的方法,传入那个类。

现在在插件内部,它将能够利用您在界面中设计的方法和属性。

interface IPlugin
{
    void CanBeCalledByTheApplication(IAppObject main);
}


interface IAppObject
{
    void Alert(string msg);
}

现在在你的插件实现中你可以去

 main.Alert("this is my message");

在你的应用程序中你会去

(IPlugin)myPlugin.CanBeCalledByTheApplication(someObject);

这显然不是一个完整的例子,但你应该能明白。

【讨论】:

  • Paul .. 感谢您抽出时间为我服务。我想知道将我的具体类与接口放在同一个程序集中是否是一个好主意。这样它就可用于主应用程序和插件。这是个好主意吗?
  • 将您的界面放在一个单独的程序集中,这样您就可以(可能)将您的插件界面分发给其他开发人员,而不需要他们将要在其中托管的最新版本的应用程序。然后,您还可以通过证明备用测试引擎/模拟等来测试插件。
  • 抱歉回复晚了。昨晚已经很晚了。我仍然有一些想法并想清除它。我所拥有的可能是一个非常糟糕的主意,但我仍然想知道为什么这是一个坏主意。我的想法是,将我的具体类和接口(用户将实现以构建插件)放在一个单独的程序集中并分发它。这个具体的类只是一组少数属性,并且有一个重写的 ToString() 方法。我还想知道的是在 vs2010 中添加这个具体的类作为链接文件。这是一个好主意吗?或者一个非常糟糕的。请告诉我..
  • 应用引用接口。将 2 个部分混合在一起的插件参考接口 dll 会咬你。顺便提一句。您是否考虑过接受答案或投票?
  • 抱歉回复晚了。我已经完成了他们两个..赞成并将其标记为答案。我已经开始使用 MEF,但是 .. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多