2011-08-09 15 views
1

I持っている2つの実装とIRepositoryと呼ばれるインターフェース、:のStructureMap設定ヘルプ

  • SqlRepository

  • SqlDualWriterRepository

最初の実装は、オブジェクトのための定期的なSQLの永続性の実装ですこれは、SqlConnectionStringProviderのインスタンスに依存しています(接続文字列を提供します。 ndはコンストラクタパラメータとして接続文字列名を取る)。

第二は、内部で2つのSQLRepository依存関係を使用する別の実装です:

public class SqlDualWriterRepository<T> : IRepository<T> 
{ 
    private readonly IRepository<T> _primaryRepository; 
    private readonly IRepository<T> _secondaryRepository; 

    public SqlDualWriterRepository(
     IRepository<T> primaryRepository, 
     IRepository<T> secondaryRepository) 
    { 
     _primaryRepository = primaryRepository; 
     _secondaryRepository = secondaryRepository; 
    } 

}

私が達成したい何がIRepositoryインスタンスを求めたときに、それがするようにのStructureMapを設定します:

SqlDualWriterRepository
  • 決意のインスタンスへ
    1. 解決IRepository私は(コンストラクタで別の文字列パラメータを提供する)別の方法でSqlConnectionStringProviderを解決する必要がありますステップ2でインスタンス2つのSqlRepositoryオブジェクトについてSqlRepository
    2. を入力するには、2つの内側のリポジトリ

    私はどのように見当がつかないこれを達成する。 属性や他のタイプの設定でそれを行う方法はありますか?

    私はStructureMap 2.6.2.0を使用しています。

  • 答えて

    1

    私は2つの解決策が見つかりました:IRepository依存関係を解決しますSqlDualWriterRepositoryインスタンスを構築する方法のStructureMapを伝えるためにラムダを使用し

    1. を:

      .Ctor <を使用して
      x.For<IRepository<Type>>().Use(
           ()=> new SqlDualWriterRepository<Type>(
            NewPrimaryRepositoryInstance<Type>(), 
            NewSecondaryRepositoryInstance<Type>())); 
      
    2. >()へ各コンストラクタの依存関係のインスタンス化の対象を明示的に指定します。

      x.For<IRepository<Type>>().Use<SqlDualWriterRepository<Type>>() 
           .Ctor<IRepository<Type>>("primaryRepository").Is(NewPrimaryRepositoryInstance<Type>()) 
           .Ctor<IRepository<Type>>("secondaryRepository").Is(NewSecondaryRepositoryInstance<Type>()); 
      

    上記の両方の例では、NewPrimaryRepositoryInstance()およびNewSecondaryRepositoryInstance()メソッドは、適切なSqlConnectionStringProvider構成を使用して、プライマリおよびセカンダリSqlRepositoriesを作成します。

    おそらくこれを達成するより良い方法がありますが、これらの解決策は今のところそれを行います。

    関連する問題