我的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中操作主项目的数据。最好的方法是什么? 我有一些在“主插件项目”中定义的数据容器类。该插件将数据放入该容器中,主项目将被数据已更改的事件识别,现在可以查看已更改的数据,然后应用更改。 这是正确的方向,我需要考虑什么以及我将使用哪些技术(即事件,静态类......)来实现它?
答案 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是您设计人员创建的用于配置插件的表单。