2016-07-01 10 views
0

.NETライブラリとして実装され、アプリケーションの起動時に読み込まれるサードパーティ製アプリケーション用のプラグインのセットを作成していますので、それらはすべて同じアプリケーションドメインにあります。ライブラリの1つは、他の人が使用するユーティリティクラスと拡張メソッドのコレクションです(他の人が記述したプラグインも含まれているため、これは基本的にメタライブラリです)。各クライアントアセンブリの個別のクラスライブラリの初期化

問題はです:ユーティリティライブラリ内には、プラグインのタイトルなどの設定を可能にする初期化コードがあります。明らかに、クライアントごとに、すなわちその場合にはライブラリごとに設定されるべきである。もちろん、これは静的な構成クラスを使用して達成することはできません。なぜなら、ドメイン内にインスタンスが1つしかないからです。

私はこのライブラリを他のプラグインの中で別のドメインに動的に読み込むことはできません。それは記憶の浪費であり、それは心配です。

質問はです:

  1. は、他のライブラリのために、このようなクライアントごとの実行時設定を実装するために合理的な/それも可能ですか?
  2. もしそうなら、どのようなアプローチをお勧めしますか?

答えて

1

私は質問を正しく理解しているかどうかわかりませんが、起動時にプラグインDLLを読み込むアプリケーションがあることを示唆しているようです。あなた(プラグインデベロッパーと潜在的なプラグインデベロッパー)は、プラグインごとに "ホイールを再発明する"ことなく、プラグインが使用できるユーティリティー機能を持つ静的クラスを提供したいと考えています。以下は、あなたのユーティリティクラスは、プラグイン固有のデータを格納するようです(上記の理解に基づいて)私の評価

  • である - それは
  • 静的することはできません定義によるので、はい、あなたが潜在的にプラグイン固有の設定ファイル(ファイルを読み込むことができます名前は静的な関数で簡単にロードする命名規則に従い、ユーティリティサービスを提供する必要がありますが、それは悪いデザインだと言います。
  • 私はむしろプラグイン固有のものメソッドの引数に基づいてサービスを提供するだけです。あなた自身がユーティリティに多くの時間を同じパラメータを渡して表示された場合、あなたは(のPluginDataのような?)独自のクラス/構造体の中に、これらのパラメータをカプセル化する必要があります

EDIT

私は拡大してみましょう上記の3番目のアプローチのビット:

プラグインの設定は、次のようなクラスを使用して表すことができます。

class PluginConfiguration { 
    public string PluginName {get; private set;} // This represents a property that all plugins share i.e. well known properties 

    // all the configurations "private" to the plugin can go here 
    // You might want to use some XmlDocument or a different data structure for this purpose 
    public Dictionary<string,string> ConfigItems {get; private set;} 

    public PluginConfiguration(string configFile) { 
     // Load the configuration from the config file 
    } 
} 

今すぐあなたのユーティリティライブラリには、引数を渡すか、タイプPluginConfigurationのデータを返すと、あなたはプラグイン

+0

のためのすべての繰り返しのコードを集中管理することができます回答ありがとうございます!アプリはサードパーティ製ですが、それ以外の場合は正しいです。残念ながら、あなたの提案は、私が避けたいと思っていたものです。悲しいかな、リフレクションがメソッド呼び出しをトレースするのに使われない限り、技術的に不可能に思えます。それは実用的ではない。しかし、私の友人は昨日、似たような解決方法を提案しましたが、実際のデータを渡す必要はありませんでした。実際のデータはすべての目的や目的のために本質的に静的です。 –

+0

これにより、構成解析の困難な作業をライブラリに渡すことができるため、クライアントはほとんど同じコードを何度も何度も書く必要がなくなります。そして、渡されなければならない唯一のパラメータは構成IDです。 –

+0

だから私はそれが私の答えになると思う。私はもちろん、コメントとしてではなく、適切に策定して投稿します。 –

関連する問題