我正在尝试编写某种插件框架......问题是: 我想使用插件中的方法作为主机应用程序中控件的事件处理程序,并防止将插件程序集加载到主appdomain中。以下代码导致plugin.dll被加载到主appdomain =(有没有其他方法可以做到这一点?
主持人申请:
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; }
}
}
插件:
[Serializable]
public class Test
{
public void TestEventHandler(object sender, System.EventArgs e)
{
MessageBox.Show("Pingback from plugin");
}
}
答案 0 :(得分:2)
不要浪费宝贵的时间编写自己的框架。使用现有的:
http://clraddins.codeplex.com/
http://blogs.msdn.com/b/clraddins/
同时检查this answer与MAF& amp; MEF,两个流行的框架。
这些框架编写得很好,它们是.NET标准并得到很好的支持。