0
爲什麼以下Delegate.CreateDelegate
產生運行時ArgumentException?通過反射創建打開的實例代理
static class Module1
{
public static void Main()
{
MyDataObject mdo = new MyDataObject();
mdo.DoMagic("Hello");
}
#region Assembly A
public class BusinessObject
{
}
public class MyBusinessObject : BusinessObject
{
public void DoMagic(string s)
{
Console.WriteLine(s);
}
}
#endregion
#region Assembly B
public class MyDataObject
{
private delegate void DoMagicDel(BusinessObject bo, string s);
private DoMagicDel delDoMagic;
public void DoMagic(string s)
{
BusinessObject bo = (BusinessObject)Activator.CreateInstance(Type.GetType("Module1+MyBusinessObject"));
MethodInfo mi = bo.GetType().GetMethod("DoMagic", BindingFlags.Public | BindingFlags.Instance);
// ArgumentException: Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type.
delDoMagic = (DoMagicDel)Delegate.CreateDelegate(typeof(DoMagicDel), null, mi);
delDoMagic(bo, s);
}
}
#endregion
}
其中大會A具有對大會B的項目引用,但反之亦然。 當我將第一個參數DoMagicMel更改爲鍵入MyBusinessObject時,它起作用。但由於程序集B不`噸知道這種類型的組件A的,這隻有在我簡單的例子:
private delegate void DoMagicDel(MyBusinessObject bo, string s);
任何機會得到這個工作?