Domanda

sto lavorando con StructureMap per le mie esigenze CIO.

Per rendere le cose piacevolmente verificabili, sto passando casi IContainer intorno per quanto possibile, di solito come parametri del costruttore. Per comodità, mi piacerebbe essere in grado di ripiegare ad usare ObjectFactory per un costruttore senza parametri.

Il modo più semplice (ho pensato) per farlo sarebbe quello di ottenere semplicemente il IContainer le coperture di classe ObjectFactory e passare che per l'altro costruttore. Purtroppo, non riesco a trovare da nessuna parte l'istanza è pubblicamente esposta.

La domanda è:

C'è un modo per ottenere il IContainer entro ObjectFactory in modo da poter gestire nel modo più semplice come istanza fornita dall'utente?

In alternativa, c'è un modo per duplicare la configurazione del ObjectFactory in una nuova istanza Container?

Esempio:

Mi piacerebbe essere in grado di effettuare le seguenti operazioni:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}
È stato utile?

Soluzione

ObjectFactory espone una proprietà contenitore che vi dà l'IContainer che stai cercando.

Ogni volta che avete bisogno di un IContainer (che non dovrebbe essere spesso) si può sempre prendere una dipendenza su di esso nella classe ctor.

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

Non credo che ci sia un modo per clonare un IContainer. C'è un metodo container.GetNestedContainer (), che consente di mantenere i transienti lo stesso per tutta la durata del contenitore nidificato. contenitori nidificati sono spesso utilizzati all'interno di un'istruzione "usando" e sono molto utili per controllare lo stato di cose come i limiti delle transazioni del database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top