2009-07-02 8 views
7

Ich versuche, das NCommon NHRepository in meinem Projekt mit Strukturkarte zu konfigurieren. Wie verhindere ich, dass der gierigste Konstruktor ausgewählt wird?Strukturkarte - Ich möchte nicht den gierigsten Konstruktor verwenden!

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

    public NHRepository() {} 


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

    ... 
} 

Meine Strukturkarte Konfiguration

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

Prost Jake

Antwort

8

Sie können das [DefaultConstructor] Attribut für den Konstruktor Sie als Standard wünschen. In Ihrem Fall würde das Setzen auf den NHRepository() -Konstruktor den Standardbaustein für die Initialisierung von StructureMap bilden.

Update: na ja, in der neuesten Version von StructureMap, mit .NET 3.5 Sie können es auch die SelectConstructor Methode angeben mit:

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

Schließlich, ich bin sicher, dass Sie es zu definieren, wären in der Lage in die XML-Konfiguration von StructureMap, aber ich habe das nicht benutzt. Du könntest ein wenig suchen. Weitere Informationen zu dem oben beschriebenen Verfahren finden Sie unter: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

Hallo Razzie, Prost für die Antwort, aber das NHRepository ist in der NCommon.NHibernate.dll, die ich nicht ändern kann. Also sollte ich nur von dem NHRepository in meinem Projekt erben und stattdessen das Attribut auf seinen Konstruktor setzen? – superlogical

+0

Das hatte ich nicht. Siehe meine aktualisierte Antwort, um die SelectConstructor-Methode zu verwenden, aber das ist nur in .NET möglich. 3.5 – Razzie

+0

Wicked, vielen Dank dafür! Stackoverflow ist großartig! – superlogical

1

So +1 für Razzie weil dies funktionieren würde, wenn die NHRepository in meiner eigenen Versammlung ist, stattdessen wähle ich die NHRepository mit meinem eigenen Repository zu wickeln wie unten ..

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

    } 

    public Repository(ISession session) 
    { 

    } 
} 

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