2009-07-02 13 views
7

Sto cercando di configurare il NCRomos NHRepository nel mio progetto con Structure Map. Come faccio a impedirgli di scegliere il costruttore più avido?Structure Map - Non voglio usare il costruttore più avido!

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

    public NHRepository() {} 


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

    ... 
} 

La mia configurazione struttura mappa

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

Acclamazioni Jake

risposta

8

È possibile impostare l'attributo [DefaultConstructor] per il costruttore che si desidera come impostazione predefinita. Nel tuo caso, impostandolo sul costruttore NHRepository() si renderebbe il coordostore predefinito per StructureMap da inizializzare.

Aggiornamento: bene, nella sua ultima versione di StructureMap, utilizzando .NET 3.5 è anche possibile specificare che con il metodo SelectConstructor:

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

Infine, sono sicuro che si sarebbe in grado di definire in la configurazione XML di StructureMap, ma non l'ho usata. Potresti fare una piccola ricerca su di esso. Per ulteriori informazioni sul metodo di cui sopra, si veda: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

Ciao Razzie, applauso per la risposta, tuttavia il NHRepository è nel NCommon.NHibernate.dll che non posso cambiare. Quindi dovrei ereditare da NHRepository nel mio progetto e mettere invece l'attributo sul suo costruttore? – superlogical

+0

Non ci avevo pensato. Vedere la mia risposta aggiornata per utilizzare il metodo SelectConstructor, ma questo è possibile solo in .NET 3.5 – Razzie

+0

Wicked grazie mille per questo! Stackoverflow è fantastico! – superlogical

1

Così +1 per Razzie perché questo funziona se il NHRepository era nella mia propria assemblea, invece ho scelto di avvolgere il NHRepository con il mio repository come seguente ..

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

    } 

    public Repository(ISession session) 
    { 

    } 
} 

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