2

クラス ライブラリにプラグイン アーキテクチャを公開した状況があり、作成したインターフェイスを他のユーザーに実装して、そのカスタム実装をクラスで使用できるようにしたいと考えています。

これを実現するために、依存性注入 (具体的にはコンストラクター注入) を使用しています。

これは問題なく動作しますが、次の 2 つの相反する目標でアプリケーションを設計しようとしたという事実を除きます。

  • API の利用者は、戻り値を変更できません。カスタムの読み取り専用コレクションとオブジェクトを作成internalし、セッターなどを使用して、消費者が変更できないようにしました
  • 他のアセンブリのプラグインは、これらの内部メソッドとプロパティにアクセスできる必要があります

これらの 2 つの目標は矛盾しています。なぜなら、私の API (または C# ) がプラグイン アセンブリへの (または同様の方法で)internalアクセスを許可する方法がないためです。InternalsVisibleTo


実例

3 つのアセンブリがあるとします。私のクラス ( Class)、プラグイン アセンブリ ( Plugin)、およびコンシューマー アセンブリ ( Consumer)。

インターフェイスは、API (アセンブリIReturnValue内のメソッドまたはクラス) の戻り値を指定します。Class問題は次のとおりです:の特定のインスタンスにPlugin読み取り専用 ( ) プロパティとインデクサーを設定できるようにしたいのですが、コードでこれを実行できるようにしたくありません。internalIReturnValueConsumer

プラグイン システムが機能しているため、どのアセンブリに付与InternalsVisibleToするかを事前に知ることはできません。


この状況では、消費者が戻り値の型を変更することを本当に気にする必要がありますか? もしそうなら、それは彼ら自身のせいのようです。そして、この問題を解決する適切な解決策は思いつきません。

4

1 に答える 1

3

コメントですでに述べたように、あなたの質問を正しく理解したかどうかはわかりません。

私はあなたの質問を次のように理解しました:

コンシューマーと実装者が使用するクラス A があります。消費者はデータを取得できるだけで、実装者はさらにデータを設定できる必要があります。

この場合、消費者のニーズに合わせてモデル化されたインターフェイスを 1 つ作成し、読み取りアクセスのみを使用し、もう 1 つを実装者用に読み取り/書き込みアクセスを作成します。

質問の更新後の更新:
消費者の読み取り専用インターフェイスは既に存在します:IReturnValueこの目的のために使用する必要があります。

ここで行う必要があるのは、API のニーズに応じて、書き込み専用または読み取り/書き込みのインターフェイスを作成することだけです。

于 2012-08-22T17:32:36.360 に答える