Я пытаюсь написать какой-то плагин-фрейм ... Проблема заключается в следующем: Я хочу использовать методы из плагинов как обработчики событий для элементов управления в главном приложении и предотвращать загрузку сборки плагина в основной appdomain. Следующий код причины plugin.dll быть загружены в основной AppDomain = (Есть ли другой способ сделать этоПлагины C# и обработчики событий
Хост приложения:
public partial class Form1 : Form
{
private AssemblyLoader _aLoader = null;
public Form1()
{
InitializeComponent();
AppDomain _domain = AppDomain.CreateDomain("Remote Load");
_aLoader = (AssemblyLoader)_domain.CreateInstanceAndUnwrap(
"Loader", "Loader.AssemblyLoader");
_aLoader.Load();
EventHandler eh = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), _aLoader.Instance, _aLoader.Method);
button1.Click += eh;
}
}
AssemblyLoader:
[Serializable]
public class AssemblyLoader : MarshalByRefObject
{
object _instance = null;
MethodInfo _method = null;
public void Load()
{
Assembly _assembly = Assembly.LoadFile(Environment.CurrentDirectory + @"\Plugin.dll");
Type _type = _assembly.GetType("Plugin.Test");
_instance = Activator.CreateInstance(_type);
_method = _instance.GetType().GetMethod("TestEventHandler");
}
public MethodInfo Method
{
get { return _method; }
}
public object Instance
{
get { return _instance; }
}
}
Plugin:
[Serializable]
public class Test
{
public void TestEventHandler(object sender, System.EventArgs e)
{
MessageBox.Show("Pingback from plugin");
}
}
Любые причины для написания собственных фреймворков при наличии уже имеющихся партий? Что вам нужно, что MEF не предоставляет, например? –