리플렉션을 사용하여 아래의 메소드를 어떻게 호출 할 수 있습니까?리플렉션을 사용하여 대리자 매개 변수가있는 메서드를 호출하려면 어떻게해야합니까?
namespace Awesomium.Core
{
public delegate JSValue JavascriptMethodHandler(object sender, JavascriptMethodEventArgs e);
public class JSObject
{
public void Bind(string methodName, JavascriptMethodHandler handler)
{
// Does something...
}
}
}
내 진행 상황은 다음과 같습니다. CreateDelegate 예외가 발생합니다.
대상 메서드에 서명하거나 보안 투명성이 대리자 형식과 호환되지 않기 때문에 대상 메서드에 바인딩 할 수 없습니다.
public class AwesomiumHelper
{
private Func<object, dynamic, dynamic> JavascriptMethodHandlerAction;
public void RegisterJavascriptMethodAndBind(string methodName, Func<object, dynamic, dynamic> func)
{
if (func != null)
{
var jsoType = AwesomiumCore.GetExportedTypes().First(f => f.Name == "JSObject");
var jso = Activator.CreateInstance(jsoType);
var t = AwesomiumCore.GetTypes().FirstOrDefault(f => f.Name == "JavascriptMethodHandler");
var mi = typeof(AwesomiumHelper).GetMethod("JavascriptMethodHandlerProxy", BindingFlags.NonPublic | BindingFlags.Instance);
// GETTING EXCEPTION HERE
var d = Delegate.CreateDelegate(t, this, mi);
// GETTING EXCEPTION HERE
JavascriptMethodHandlerAction = func;
var mi0 = jsoType.GetMethod("Bind", new[] { typeof(string), t });
mi0.Invoke(jso, new object[] { methodName, d });
}
}
private dynamic JavascriptMethodHandlerProxy(object sender, dynamic e)
{
return JavascriptMethodHandlerAction?.Invoke(sender, e);
}
}
UPDATE : 내가 두 개의 라이브러리를 작성하여 문제를 해결했다. 인터페이스 라이브러리 및 클래스 라이브러리. 인터페이스 라이브러리는 클래스 라이브러리와 주 프로그램에 의해 참조됩니다. Awesomium은 클래스 라이브러리에 의해 참조됩니다. 런타임시 리플렉션에 의해 클래스 라이브러리를로드하고 인터페이스 라이브러리에 정의 된 메서드를 사용합니다.
이 그것을 위임 매개 변수를 가지고 있기 때문에 질문이 다른 것입니다. – Tempeck
네가 맞아,이 정도면 충분 해. 그리고 나는 명백한 복제물을 보지 못했다. –
프록시가 동적이 아닌 JSValue를 반환해야합니다. –