4

この質問に関するちょっとした背景の話:

地元のバー用に POS システムを作成していますが、これをプラグイン対応にしたいと考えています。この特定の問題については、次のシナリオを使用します。

名前が示すように、現在の領収書、VAT などの製品に関連するすべての計算を行う電卓クラスがあります。私たちが使用するこれらの特別なコインを使用してください。計算機は、領収書 (コンストラクターで渡される) のすべての製品を単純にループ処理して、合計金額を計算します。レシート クラスには、そこにあるすべての製品オブジェクトのリストがあります。組み込みの製品クラスには、コインに関連するメンバーはありません。これらは、プラグイン アセンブリ内の別の製品クラスにあります。

ここでの質問は、製品に使用する正しいクラスをメイン プログラムに動的に選択させるにはどうすればよいかということです。

すべてのプラグインをリストまたはディクショナリにロードし、それらをループして、製品クラスのオーバーライドが存在するかどうかを確認してから使用することを考えていましたが、オプションではない何らかの共通インターフェイスが必要です。私はPHPでそれを行う方法を正確に知っていますが、実行/インストール時にソースを編集/更新されたものに置き換えることができます.

前もってありがとう、トム。

編集:問題を単純化するには: 既存のアプリケーションでメソッドの名前/デリゲートなどをハードコーディングすることなく、外部プラグイン アセンブリに組み込みアセンブリを新しいメソッドで拡張させることは可能ですか?

4

4 に答える 4

7

提供された質問から、共通のインターフェースを使用しない理由はわかりません。例:

public interface IProduct {

      decimal Price {get;}
}

public class Product : IProduct 
{
     decimal price;
     public decimal Price {
          get {
              return price;
          }
     }
}

public class Product1 : IProduct 
{
     decimal price;
     public decimal Price {
          get {
              return price;
          }
     }
}
....

Calculatorのコレクションを反復処理し、IProductsすべての人にそのプロパティを呼び出した後Price、地域関連の VAT + 何でも適用し、最終価格を構築します。

于 2013-04-16T15:14:22.457 に答える
2

MEFまたは半分まともなDIコンテナはそれを行うことができるはずです..したがって、すべてのクラスがインターフェースを実装し、カタログから列挙可能なインスタンスを返すRESOLVEを呼び出します。

http://msdn.microsoft.com/en-us/library/dd460648.aspxの MEF の完全なドキュメント

于 2013-04-16T15:14:41.730 に答える