2009-08-01 19 views
3

私はプラグインとしてカスタム関数を実装する必要があるデータ駆動型マッピングアプリケーションを持っています。私が実行する必要のあるカスタムメソッドの名前も、マッピングデータにあります。私は、invokeコマンドを使ってメソッドを呼び出すことができることを知っています。しかし、どのようにして各メソッドに適切な署名が付いていることを確認できますか?C#でインターフェイスを定義する手助けが必要

+0

例を挙げることができますか? –

答えて

1

まず第一に、オーバーライドされたメソッドの任意の名前を許可する必要はないと思います。インターフェイスを定義して単純に保つだけです。

作業を行うメソッドにデリゲートを返すメソッドでインターフェイスを定義できます。

それ以外の場合は、マップされたメソッドのMethodInfoを取得し、実行時に正しいシグネチャがあるかどうかを確認するためにリフレクションを使用するだけで済みます。

+0

名前は任意ではありません。社内の開発者は、カスタム関数を作成し、その名前をデータベースに入れてユーザーが特定のマップに適用できるようにします。私のサービスがマップを適用しているときは、タスクを完了するためにカスタム関数を呼び出す必要があります。新しいカスタム関数が必要になるたびにアプリケーションを再コンパイルしないようにしています。率直に言って、リフレクション/インターフェース/デリゲートは、私が慣れていたより少し複雑です。その間、私は早期拘束力を持つことになります。しかし、私はもっと拡張可能な方法でこれを行う方法を知る必要があります。 –

+0

インターフェイスはまったく複雑ではなく、初心者のC#の本でもその使い方を教えてくれます。 –

+0

'カスタム関数' - SQL、C#、または何ですか?あなたのサービスはC#ですか? –

1

通常、プラグインアーキテクチャを開発するときは、プラグインで呼び出すメソッドを持つインタフェースを定義します。プラグインはインターフェイスを実装する必要があります。ロードすると、インターフェイスとしてキャストされます(実装されていない場合は失敗します)。これをコードとしてインターフェイスとして使用します。プラグインの動作がより一般的な場合は、インターフェイスをより一般的に定義するだけです(たとえば、設定を使用してプラグインのパラメータを設定した後、単純なメソッドを引数なしで使用してプラグインの機能を呼び出すなど)。私はあらかじめ定義されたインターフェイスで作業するほうが簡単だと思っています。

1

あなたはリフレクションを使用する必要があります。

GetMethod()メソッドを呼び出すと、問題のメソッドに対してMethodInfoオブジェクトが取得されます。

次に、.GetParameters()メソッドを使用してメソッドにパラメータを保持する必要があります。次に、それらのメソッドが持つ期待値と比較する必要があります。

関連する問題