Domanda

Sto cercando di configurare il Ncommon NHRepository nel mio progetto con la struttura della mappa. Come faccio a impedire che la scelta del costruttore più golosi?

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

    public NHRepository () {}


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

    ...
}

La mia struttura di configurazione mappa

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

Saluti Jake

È stato utile?

Soluzione

È possibile impostare il [DefaultConstructor] attributo per il costruttore che si desidera come impostazione predefinita. Nel tuo caso, l'impostazione sul NHRepository() costruttore renderebbe la constuctor predefinito per StructureMap per 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 definirlo nella configurazione XML di StructureMap, ma non ho usato questo. Si potrebbe fare un po 'di ricerca su di esso. Per ulteriori informazioni sul metodo di cui sopra, si veda: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm # sezione3

Altri suggerimenti

Quindi, +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 qui di seguito ..

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

    }

    public Repository(ISession session)
    {

    }
}

ForRequestedType(typeof (IRepository<>))
                .TheDefaultIsConcreteType(typeof (Repository<>));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top