2016-07-14 11 views
0

構造体マップを使用してサードパーティのインスタンスを管理しようとした人はいますか?サードパーティのライブラリインスタンスを構造体に統合する方法マップ

サードパーティライブラリを管理する私のアプローチは、ライブラリAPIの周りにラッパーを書くことでした。

私が直面していることは、構造マップの依存性注入の利点をどのように活用するかについてのジレンマですが、第三者のライブラリの周りにラッパーを保存することはまだまだあります。

例えば、私がLibraryClassを持っていて、クラスWrapperClassを持っているとします。私のラッパーコンストラクタは次のようになります。

class WrapperClass : IWrapperClass{ 
     var instance; 
     public WrapperClass(){ 
      instance = new LibrayClass(); 
     } 
    } 

これに伴う問題は、私は私のコードでこれを使用してどこ構造マップはWrapperClassをロードするためにLibraryClassタイプへのアクセス権を持っている必要があるので、私はこのオブジェクトを模擬することができないということです。

これで人々は何をしますか? LibraryClass型を構造マップに公開するだけで、順番に構造マップをロードすることができますか?

答えて

0

サードパーティの依存関係を注入する必要があるときはいつも、インターフェイスを使ってその周りにラッパーを配置します。オブジェクトをインスタンスとして公開するのではなく、基になるオブジェクトの関数をラッパーに公開しようとします。例えば、AmazonS3与えられ、ラッパークラスは、あなたが、あなたのクラスにIFileStorageを注入することができ、それはあなたがテストのためにそのクラスをモックすることができますインターフェイスですので

class FileStorage : IFileStorage 
{ 
    private AmazonS3 _amazon; 
    public FileStorage(AmazonS3 amazon) { _amazon = amazon } 
    void StoreFile(string file, string key) 
    { 
      _amazon.StoreFile(file, key); 
    } 
} 

のようになります。

そして、構造マップ設定で3番目のライブラリクラスタイプを登録します。

+0

構造マップは、AmazonS3が構造マップオブジェクトファクトリに登録されていないと不満を持ちますか? – Erion

+0

必要に応じていくつかのオプションがあります。 1. AmazonS3を構造マップに登録します。 2. IFileStorageをとして設定します。().ctor ().Is(新しいAmazonS3) 3.コンストラクタにAmazonS3を新規にアップし、パラメータリスト 2番の場合は、コンストラクタのシングルトンを実行するかどうかを覚えていません。そのルートに行くかどうかを調べることができます。 –

+0

okだから、サードパーティのライブラリタイプを公開します構造体マップ – Erion

関連する問題