こんにちは私はMono 2.8.2でUnity3dで使用されるサブセットを作成しようとしています。私はメッセンジャーに "subscribe"属性で装飾されているメソッドを自動的に購読するヘルパーを作成するのは面白いと思った。モノでmethodInfoから代理人を作成する2.8.2
私はこれに頭を悩まされていて、他の関連するスタックの質問の多くを私の問題の解決なしに読んだことがあります。 Frankly, I don't know if I am doing something wrong or if this is a bug in 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
}
登録しようとしているメソッドの署名は何ですか? 'void MyMethod(object arg)'のようなシグネチャを持っていますか? –
正しい。私は投稿を更新しました。 – user2085865
モノ2.8は非常に古く、3.2.3にアップグレードしてください – knocte