c# - 使用插件编辑 UI
问题描述
我构建了这段代码:https ://www.codeproject.com/Articles/1052356/Creating-a-Simple-Plugin-System-with-NET ,我把它变成了一个窗口形式。但是我不知道如何让它从 DLL 编辑 UI。我使用以下代码创建了一个控制器类:
public RichTextBox console;
public void WriteToRichTextBox(dynamic text, RichTextBox control)
{
control.AppendText(text + "\n");
}
` 但是,我不知道如何让它们共享同一个控制器类。
Form Code:
PluginLoader loader;
Controller controller;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
//Let the user fill in an plugin name
string line = textBox1.Text;
string name = line.Split(new char[] { ' ' }).FirstOrDefault();
IPlugin plugin = PluginLoader.Plugins.Where(p => p._pluginName
== name).FirstOrDefault();
if (plugin != null)
{
//If the plugin is found, execute it
plugin.PluginLaunched();
}
else
{
Log(string.Format("No plugin found with name '{0}'", name));
}
}
catch (Exception ex)
{
Log(string.Format("Caught exception: {0}", ex.Message));
}
textBox1.Clear();
}
private void Log(string text)
{
richTextBox1.AppendText(text + "\n");
}
private void Form1_Load(object sender, EventArgs e)
{
Log("Started plugin app..");
try
{
loader = new PluginLoader();
controller = new Controller();
loader.LoadPlugins();
controller.console = richTextBox1;
}
catch (Exception ex)
{
Log(string.Format("Plugins couldn't be loaded: {0}",
ex.Message));
}
}
Interface:
public interface IPlugin
{
string _pluginName { get; }
string _pluginDetails { get; }
void PluginLaunched();
}
Plugin:
public class ListPlugins : IPlugin
{
public void PluginLaunched()
{
Controller _Controller = new Controller();
foreach (IPlugin plugin in PluginLoader.Plugins)
{
_Controller.WriteToRichTextBox(string.Format("{0}: {1}", plugin._pluginName, plugin._pluginDetails), _Controller.console);
}
}
public string _pluginName
{
get
{
return "listplugins";
}
}
public string _pluginDetails
{
get
{
return "This plugin shows all loaded plugins and what they do.";
}
}
}
解决方案
您已经完成了实例化插件的困难部分,现在您只需要在执行插件时传递控制器,如下所示:
plugin.PluginLaunched(controller);
推荐阅读
- android - MockWebServer 不抛出自定义异常改造
- r - Faster way to run a regression on large Data
- python - 在列表开头插入元素
- java - 在给出结果之前迭代2个Arraylists检查不同类型的相等值?
- c++ - 是否可以创建模板类的向量并调用其函数?
- python - DefaultCredentialsError 提出“找不到文件”
- android - 我项目中的所有标签都返回 NULL,即使它包含值
- python-3.x - 如何使用 openpyxl 查找包含图像对象的单元格名称?
- javascript - Firestore/Rxfire - 查询集合然后订阅子 observables 数组
- python - 使用 python 脚本从设备获取 fps