7

プロジェクトで構造マップを使用してNCommonNHRepositoryを構成しようとしています。最も貪欲なコンストラクターを選択しないようにするにはどうすればよいですか?

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

    public NHRepository () {}


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

    ...
}

私の構造マップ構成

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

乾杯ジェイク

4

2 に答える 2

8

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

更新:最新バージョンのStructureMapでは、.NET 3.5を使用して、SelectConstructorメソッドを使用して指定することもできます。

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

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

于 2009-07-02T11:19:36.533 に答える
1

したがって、Razzieの+1は、NHRepositoryが自分のアセンブリにある場合に機能するため、代わりに、以下のようにNHRepositoryを自分のリポジトリでラップすることを選択します。

public class Repository<T> : NHRepository<T>
{
    [DefaultConstructor]
    public Repository()
    {

    }

    public Repository(ISession session)
    {

    }
}

ForRequestedType(typeof (IRepository<>))
                .TheDefaultIsConcreteType(typeof (Repository<>));
于 2009-07-02T11:31:36.073 に答える