2009-07-02 16 views
7

Projemdeki NCommon NHRepository'yi Yapı Haritası ile yapılandırmaya çalışıyorum. Greediest kurucuyu seçmekten nasıl vazgeçebilirim?Yapı Haritası - Greediest kurucuyu kullanmak istemiyorum!

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

    public NHRepository() {} 


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

    ... 
} 

My yapı Harita yapılandırma

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

Alkış Jake

cevap

8

Sen burada varsayılan olarak arzu yapıcısı için [DefaultConstructor] Özellik ayarlayabilirsiniz. Sizin durumunuzda, NHRepository() yapıcısına ayarlamak, StructureMap'ın başlatılması için varsayılan kurucuyu yapar.

Güncelleme: iyi, .NET 3.5 kullanarak StructureMap son sürümünde, sen de SelectConstructor yöntemini kullanarak belirtebilirsiniz: Nihayet

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

, sana bunu tanımlamak mümkün olacaktır eminim StructureMap'in XML yapılandırması, ancak bunu kullanmadım. Üzerinde biraz arama yapabilirsin. Yukarıdaki yöntemi hakkında daha fazla bilgi için bkz: Yani http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

Merhaba Razzie, cevap için alkışlar, ancak NHRepository, değiştiremediğim NCommon.NHibernate.dll dosyasında. Öyleyse projemdeki NHRepository'den miras almalı ve niteliği yerine kurucusuna koymalı mıyım? – superlogical

+0

Bununla ilgili olmasaydım. SelectConstructor yöntemini kullanmak için güncellenmiş cevabımı görün, ancak bu yalnızca .NET 3.5 – Razzie

+0

'da mümkündür. Stackoverflow harika! – superlogical

1

1 Razzie için NHRepository kendi mecliste olsaydı bu işe çünkü, bunun yerine .. aşağıda gibi kendi Repository ile

NHRepository sarmak için tercih
public class Repository<T> : NHRepository<T> 
{ 
    [DefaultConstructor] 
    public Repository() 
    { 

    } 

    public Repository(ISession session) 
    { 

    } 
} 

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof (Repository<>)); 
İlgili konular