Structuremap - 我不想使用最贪婪的构造函数!

时间:2009-07-02 11:13:57

标签: structuremap

我正在尝试使用Structure Map在我的项目中配置NCommon NHRepository。如何阻止它选择最贪婪的构造函数?

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

    public NHRepository () {}


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

    ...
}

我的结构图配置

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

干杯 杰克

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

对于Razzie来说是+1,因为如果NHRepository在我自己的程序集中,这将有效,而我选择用我自己的Repository包装NHRepository,如下所示。

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

    }

    public Repository(ISession session)
    {

    }
}

ForRequestedType(typeof (IRepository<>))
                .TheDefaultIsConcreteType(typeof (Repository<>));