您好我正在尝试在 Mono 2.8.2 中创建一个信使 - Unity3d 使用的子集。我认为创建一个助手以在使用“订阅”属性装饰时自动订阅信使方法会很不错。
我一直在为此挠头,并阅读了许多其他相关的堆栈问题,但没有解决我的问题。坦率地说,我不知道我做错了什么,或者这是否是 Mono 中的错误。
foreach (var methodInfo in methods)
{
var attr = methodInfo.GetAttribute<SubscribeAttribute>();
if (attr == null)
continue;
var parmas = methodInfo.GetParameters();
if (parmas.Length != 1)
{
Debug.LogError("Subscription aborted. Invalid paramters.");
continue;
}
var type = parmas[0].ParameterType;
// Crashes here
// ArgumentException: method argument length mismatch
// I have tried many combinations..
// Direct typing of the message type and dynamic typing
var action = (Action<object>)Delegate.CreateDelegate(typeof(Action<object>), methodInfo);
// also does not work
// var dt = Expression.GetActionType(parmas.Select(o => o.ParameterType).ToArray());
// var action = Delegate.CreateDelegate(dt, methodInfo);
Subscribe(type, action, instance);
}
任何建议或解决方法将不胜感激。
编辑 方法签名看起来像:
[Subscribe]
void OnMessage(object message){
// Hello World
}
虽然,原本...
[Subscribe]
void OnTestMessage(TestMessage message){
// Hello World
}