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);
이 작업을 수행 할 기회가 있습니까?