私は質問を正しく理解しているかどうかわかりませんが、起動時にプラグイン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
のデータを返すと、あなたはプラグイン
のためのすべての繰り返しのコードを集中管理することができます回答ありがとうございます!アプリはサードパーティ製ですが、それ以外の場合は正しいです。残念ながら、あなたの提案は、私が避けたいと思っていたものです。悲しいかな、リフレクションがメソッド呼び出しをトレースするのに使われない限り、技術的に不可能に思えます。それは実用的ではない。しかし、私の友人は昨日、似たような解決方法を提案しましたが、実際のデータを渡す必要はありませんでした。実際のデータはすべての目的や目的のために本質的に静的です。 –
これにより、構成解析の困難な作業をライブラリに渡すことができるため、クライアントはほとんど同じコードを何度も何度も書く必要がなくなります。そして、渡されなければならない唯一のパラメータは構成IDです。 –
だから私はそれが私の答えになると思う。私はもちろん、コメントとしてではなく、適切に策定して投稿します。 –