2012-04-15 6 views
2

私はNHibernateRepositoryを使用したいIRepositoryインターフェースを持っています。Structuremapジェネリックでの設定

構造マップでどのように設定すればよいですか?

protected void ConfigureDependencies() 
{ 
    ObjectFactory.Initialize(
     x => 
      { 
       x.For<ILogger>().Use<Logger>(); 
       x.For<IRepository<T>>().Use<NHibernateRepository<T>>(); 
      } 
     ); 
} 

私はこの行は、一般的なパラメータTの代替を期待しているT.

+0

はこれを試してみてください(typeof(NHibernateRepository <>)); ' – Steven

答えて

2

あなたは、NHibernateRepository<>のための対応クロージング型に使用しIRepository<>のすべてクローズタイプをマッピングすることができるようにしたい場合: `x.For(typeof演算(IRepository <>))の使用:

x.For(typeof(IRepository<>)).Use(typeof(NHibernateRepository<>)) 
0

上のエラーを取得メートル:

x.For<IRepository<T>>().Use<NHibernateRepository<T>>(); 

Tがリポジトリに格納されるタイプ、すなわち? IRepositoryの実装としてNHibernateRepositoryクラスを選択しましたが、格納する内部クラスは表示されていません。 Generic repository - IRepository<T> or IRepository

+0

インターフェイスと実装の両方が一般的なので、私は任意のモデルクラスを使用できます。 – DarthVader

+0

あなたは絶対に行うことができますが、クラス内で宣言されていないため、コード内にあるジェネリック型は使用できません。おそらくジェネリックスなしでIRepositoryを使用するか、他の回答で示唆されるように動的に試してみてください。 – yamen

0

をおそらくダイナミックで<T>を置き換える:

また、ここを参照してください、非ジェネリックIRepositoryを使用して見て?

x.For<IRepository<dynamic>>().Use<NHibernateRepository<dynamic>>(); 

第2の点として、シングルトン/サービスロケータパターンはかなり熱い議論です。

0

this articleをご覧ください。

public void ConfigureDependencies() 
{ 
    ObjectFactory.Initialize(x => x.Scan(cfg => 
    { 
     cfg.TheCallingAssembly(); 
     cfg.IncludeNamespaceContainingType<Logger>(); 
     cfg.ConnectImplementationsToTypesClosing(typeof(NHibernateRepository<>)); 
    })); 
} 

ApplicationContextの静的クラスについて:基本的には、何がやりたいことは、このようなものであるあなたが本当に横断的な懸念を持っている場合、私はそれで本当に間違って何も見えません。

関連する問題