0

out パラメーターを含まない、何かを返す、または引数を取る単純な静的メソッドがあります。私はこのように実行します:

Assembly assembly = ResourceConfig.GetAssembly("IntegrationServices");
assembly.GetStaticMethod("Current.IntegrationServices.SomeIntegration.SomeMethod").Invoke();

これは正常に実行されているようです...

次に、1 つの出力パラメーター (文字列) を返し、ブール値を返す静的メソッドがあります。これを実行したいのですが、何が間違っているのかわかりません。これは私がこれまでに持っているものです:

var objectArray = new object[1];
(bool)assembly.GetStaticMethod("Current.IntegrationServices.SomeIntegration.ReturningMethod").Invoke(objectArray)

私が理解したことから、objectArray[0] にアクセスして出力値を取得できるはずですが、このコードを実行しようとするとエラーが発生します:

Method Current.IntegrationServices.SomeIntegration.ReturningMethod() cannot be found.

そして、メソッドが実際に存在することを保証します... :)

リフレクションなしでこのメソッドを呼び出すと、次のようになります。

string s;
bool value = Current.IntegrationServices.SomeIntegration.ReturningMethod(out s);

GetStaticMethod と Invoke で実行する方法について何か提案はありますか?

編集: GetStaticMethodWithArgs(this Assembly obj, string methodName, params Type[] list):MethodDelegate というメソッドが見つかりました。これをどのように使用しますか?

編集 2: 引数を指定して静的メソッドを実行できるようになりました。次のようになります。

Assembly assembly = ResourceConfig.GetAssembly("IntegrationServices");
var staticMethodWithArgs = assembly.GetStaticMethodWithArgs("Current.IntegrationServices.SomeIntegration.ReturningMethod", typeof(string), typeof(string));
staticMethodWithArgs.Invoke(InputUsername.Text, InputPassword.Text)

まだパラメーターなしでメソッドを使用できません...提案は評価されています

4

2 に答える 2

0

多くの騒乱とテストの後、私はそれを理解しました....変数の適切なタイプを使用した場合、それはすべてダンディで問題ありませんでした...それはString&である必要がありました..私がこれを得た方法は次の行でした:

methodInfo.GetParameters()[0].ParameterType.UnderlyingSystemType

さらにこれを試してみると、コードは次のようになりました。

Assembly assembly = ResourceConfig.GetAssembly("IntegrationServices");
BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod;
MethodInfo methodInfo = assembly.GetType("Current.IntegrationServices.SomeIntegration").GetMethod("GetAbaxUserToken", bindingFlags);

var staticMethodWithArgs = assembly.GetStaticMethodWithArgs("Current.IntegrationServices.SomeIntegration.ReturningMethod", methodInfo.GetParameters()[0].ParameterType.UnderlyingSystemType);

その結果、MethodInfo を呼び出し、GetStaticMethodWithArgs の概念を削除することになりました...誰かがこの方法で String& 型をクラッシュせずに取得する方法を知っていれば: typeof(String&) 私は素晴らしいでしょう :)

于 2013-06-18T12:53:21.570 に答える