PlugIn-Concept中的数据操作

时间:2010-05-17 16:09:18

标签: c# plugins

我的C#项目有一个战略问题。我想实现一个插件概念,现在正在努力解决插件操作主项目数据的最佳方式。

首先,我创建了一个“Master”PlugIn项目,它定义了插件的接口,以及一个属性,当我在主项目中加载它时,它将一个类标识为一个插件类。

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public sealed class GraphViewerPlugInAttribute : Attribute
{
}

public interface IGraphViewerPlugIn
{
  Panel GetRightSidePanel();
  string Name();
}

然后在主项目和插件类中引用该项目。 pluginclass实现了接口...

[GraphViewerPlugIn]
public class myTestPlugIn : IGraphViewerPlugIn
{
  public Panel GetRightSidePanel()
  {
    Panel myPanel = new Panel();
    myPanel.BackColor = System.Drawing.Color.Red;

    return myPanel;
  }

  public string Name()
  {
    return "TestPlugIn";
  }
}

...主项目加载存储在某个目录中的所有插件。

到目前为止,这项工作非常顺利,我可以从PlugIn获得特殊的Panel,但现在我想从PlugIn中操作主项目的数据。最好的方法是什么? 我有一些在“主插件项目”中定义的数据容器类。该插件将数据放入该容器中,主项目将被数据已更改的事件识别,现在可以查看已更改的数据,然后应用更改。 这是正确的方向,我需要考虑什么以及我将使用哪些技术(即事件,静态类......)来实现它?

1 个答案:

答案 0 :(得分:0)

一种方法是添加一个配置按钮,用于激活设计用于配置的接口上的方法。

此方法可以使用任何想要配置插件的代码,包括自己调用windows窗体。

如果您使用的是Windows窗体或winfx,而不是自定义UI,这是理想的方法,因为它会从应用程序本身中删除与插件相关的所有逻辑,除非通知请求配置窗口。

public interface IGraphViewerPlugIn 
{ 
  Panel GetRightSidePanel();
  string Name(); 
  void ShowConfigurationDialog();
} 

当然,您可以实现ShowConfigurationDialog:

public void ShowConfigurationDialog()
{
    Form form = new MyConfigurationDialog();
    form.ShowDialog();
}

其中MyConfigurationDialog是您设计人员创建的用于配置插件的表单。