2010-09-15 3 views
0

Я пытаюсь написать какой-то плагин-фрейм ... Проблема заключается в следующем: Я хочу использовать методы из плагинов как обработчики событий для элементов управления в главном приложении и предотвращать загрузку сборки плагина в основной 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"); 
    }  
} 
+0

Любые причины для написания собственных фреймворков при наличии уже имеющихся партий? Что вам нужно, что MEF не предоставляет, например? –

ответ

2

Не тратьте свое драгоценное время на создание собственного фрейма. Используйте существующий:

http://clraddins.codeplex.com/

http://blogs.msdn.com/b/clraddins/

Также проверьте this answer, что говорить о сравнении с MAF & MEF, двух популярных фреймворков.

Эти рамки также написаны, они являются стандартами .NET и хорошо поддерживаются.

Смежные вопросы