私はプラグインをサポートするアプリケーションを作成しています。プラグインの作成者は、作成するプラグインにいくつかのインスタンスを提供する責任があります。これらのインスタンスを提供するには2つの方法があります。プラグインにインスタンスを提供するためのより良いアプローチはどれですか?
オプション1:プラグインライターは、このように彼女のプラグインを書き込みます
public interface IGiveMe1 { INeed1 Need1 { set; } }
public interface IGiveMe2 { INeed2 Need2 { set; } }
public class MyPlugin : IGiveMe1, IGiveMe2
{
// This has to be parameterless
MyPlugin() { ... }
#region IGiveMe1 Members
public INeed1 Need1 { set { ... } }
#endregion
#region IGiveMe2 Members
public INeed2 Need2 { set { ... } }
#endregion
}
プラグインの作成者は、必須パラメータなしのコンストラクタを使用して、インスタンスを作成した後、それはそのプラグインのクラスが実装インタフェースを探します。プラグインがIGiveMe1を実装している場合、プラグイン作成者はINeed1のセッターを呼び出します。 IGiveMe2.INeed2と同じです。
オプション2:プラグインのライターは次のように彼女のプラグインを書き込みます。この方法では
public class MyPlugin
{
MyPlugin(INeed1 need1, INeed2 need2)
{
...
}
}
、タイプINeed1とINeed2のパラメータを取るコンストラクタのためのクリエイターを検索プラグイン。最も一致するパラメータ(最も一致するパラメータを持つもの)を見つけ、インスタンスを渡すことによって呼び出します。
このアプリケーションにプラグインを書き込む場合は、どちらの方法をお勧めしますか?