2009-08-04 4 views
0

私はプラグインをサポートするアプリケーションを作成しています。プラグインの作成者は、作成するプラグインにいくつかのインスタンスを提供する責任があります。これらのインスタンスを提供するには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のパラメータを取るコンストラクタのためのクリエイターを検索プラグイン。最も一致するパラメータ(最も一致するパラメータを持つもの)を見つけ、インスタンスを渡すことによって呼び出します。

このアプリケーションにプラグインを書き込む場合は、どちらの方法をお勧めしますか?

答えて

0

2番目のオプションは、はるかに簡単で明確です。プラグインの単体テストもより明確になります。

また、すべてのプラグインにすべてのINeedXを渡したくない場合は、コンストラクタパラメータのタイプを(明らかに反射を使用して)一致させ、コンストラクタで受け入れられるものだけを渡します。

関連する問題