2009-07-02 8 views
7

私はNCommon NHRepositoryを構造マップでプロジェクトに設定しようとしています。どのようにして貪欲なコンストラクタを選択するのをやめさせるのですか?構造体マップ - 私はgreediestコンストラクタを使用したくありません!

public class NHRepository<TEntity> : RepositoryBase<TEntity> 
{ 

    public NHRepository() {} 


    public NHRepository(ISession session) 
    { 
     _privateSession = session; 
    } 

    ... 
} 

マイ構造マップの設定

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof(NHRepository<>)) 

乾杯 ジェイク

答えて

8

あなたがデフォルトとして希望コンストラクタの[DefaultConstructor]属性を設定することができます。あなたの場合、NHRepository()コンストラクタに設定すると、それを初期化するためのStructureMapのデフォルトのコンストラクタになります。

更新:だけでなく、.NET 3.5を使用してのStructureMapの最新バージョンであなたもSelectConstructorメソッドを使用して、それを指定することができます。

var container = new Container(x => 
{ 
    x.SelectConstructor<NHRepository>(()=>new NHRepository()); 
}); 

は最後に、私はあなたがそれを定義することができるだろうと確信していますStructureMapのXML構成ですが、私はこれを使用していません。あなたはそれについて少し調べることができます。上記の方法の詳細については、以下を参照してください。そうhttp://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

こんにちは、私は変更することはできませんNCommon.NHibernate.dllには、NHRepositoryは、答えのための歓声です。だから私はちょうど私のプロジェクトでNHRepositoryから継承する必要があり、代わりにそのコンストラクタに属性を置く? – superlogical

+0

私はそれについては考えていませんでした。 SelectConstructorメソッドを使用する私の更新された答えを参照してください、それは.NET 3.5でのみ可能です – Razzie

+0

これは邪悪な感謝です! Stackoverflowは素晴らしいです! – superlogical

1

+1をRazzieためNHRepositoryは、私自身のアセンブリにあった場合、これは動作しますので、代わりに私が...以下のように自分のリポジトリで

をNHRepositoryをラップすることを選択します
public class Repository<T> : NHRepository<T> 
{ 
    [DefaultConstructor] 
    public Repository() 
    { 

    } 

    public Repository(ISession session) 
    { 

    } 
} 

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof (Repository<>)); 
関連する問題