В моем основном приложении есть набор форм, которые имеют как частные, так и публичные функции.У меня есть подключаемая архитектура, которая обращается к каждой форме, когда она создается и загружается, и содержит ссылку на нее для ее обновления, добавления элементов управления и т. Д.
Что мы пытаемся сделать, это реализовать эту архитектуру подключаемого модуля, но некоторые плагины могут вызывать закрытые функции формы.Вот пример того, что я пробовал с Type.InvokeMember:
public partial class Form1 : Form
{
Form1()
{
InitializeComponent();
}
private void SayHello()
{
MessageBox.Show("Hello World!");
}
}
В другой DLL ...
public class PluginClass
{
Form1 myReferencedForm1;
PluginClass()
{
//Constructor code here...
//Also sets the reference to existing Form1 instance
}
private CallMember()
{
Type t = typeof(Form1); //I guess I can also call 'myReferencedForm1.GetType();' here as well
t.InvokeMember("SayHello",
System.Reflection.BindingFlags.InvokeMethod |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Public,
null, myReferencedForm1, new object[] { });
}
}
Я пробовал "SayHello"
и "SayHello()"
, и они обавернуть ошибку «MissingMethodException»:
Method 'Form1.SayHello()' not found.
Нужно ли создавать и использовать Binder?Если да, то как мне это сделать?Могу ли я сделать это проще с System.Windows.Forms.Message?Если так, то как?