2009-07-02 28 views
7

我想配置NCommon NHRepository我带结构的地图项目。我如何阻止它选择最贪婪的构造函数?结构地图 - 我不想使用贪婪的构造!

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

    public NHRepository() {} 


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

    ... 
} 

我的结构图配置

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

干杯 杰克

回答

8

您可以设置[DefaultConstructor]属性为要作为默认构造函数。在你的情况下,将其设置在NHRepository()构造函数将其设置为默认constuctor为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

+0

金酸莓嗨,寻找答案的欢呼声,不过NHRepository是我无法改变的NCommon.NHibernate.dll。那么我应该从我的项目中的NHRepository继承,并将其属性放在其构造函数中吗? – superlogical 2009-07-02 11:22:43

1

所以+1的金酸莓因为如果NHRepository是我自己组装这样的工作,而不是我选择我自己喜欢库下面包裹NHRepository ..

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

    } 

    public Repository(ISession session) 
    { 

    } 
} 

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