Domanda

Inserito anche questo nel gruppo structuremap. Abbiamo appena iniziato a utilizzare la strutturemap la scorsa settimana e la stiamo scavando davvero.


Sono sicuro che mi manca qualcosa di semplice.

Sto cercando di imitare il seguente codice, usando SM all'interno della mia fabbrica. Sono d'accordo con la dipendenza dal contenitore nella classe di fabbrica. Il il consenso in questo thread sembrava essere che questo fosse il giusto approccio: http://www.codeplex.com/unity/Thread/ View.aspx? ThreadId = 29697 . Se c'è un modo migliore, sono aperto ad ascoltare altri modi di realizzare questo.

Fondamentalmente il metodo di creazione della mia fabbrica prenderà un valore enum (esso potrebbe essere un tipo reale, ma in entrambi i casi non è qualcosa di controllato dal contenitore) e dovrebbe restituire l'istanza corretta. Nota che i tipi di restituzione saranno gestiti da SM. Non voglio mettere tutto dipendenze nel Ctor della fabbrica, poiché potrebbero essercene molti (!).

public class PreSaveActionFactory : IPreSaveActionFactory 
{ 
    public IPreSaveAction Create(MyEnumType enumType) 
    { 
        IPreSaveAction action; 

        switch (enumType) 
        { 
            case MyEnumType.Value1: 
                //imagine this has 3 Ctor arguments 
                action = new Value1PreSaveAction(); 
                break; 
            case MyEnumType.Value2: 
                //and imagine this has 4 completely different Ctor arguments 
                action = new Value2PreSaveAction(); 
                break; 
            default: 
                throw new NotSupportedException(); 
        } 

        return action; 
    } 
} 

Collegamento alla giusta sezione della documentazione va bene, non è necessario scrivi il codice per me (anche se non mi lamento :)). mi piacerebbe sapere come appare la fabbrica e anche il codice di registro.

È stato utile?

Soluzione

Non l'ho mai provato in questo modo, ma è possibile utilizzare il metodo .WithName () per fornire un nome di istanza, quindi presumibilmente ottenere l'istanza tramite ObjectFactory.GetNamedInstance ().

Un altro approccio (che ho usato con successo) sarebbe quello di creare un dizionario che funga da typemapping. Cerca lì il tipo e quindi ottieni un'istanza di quel tipo tramite ObjectFactory.

Altri suggerimenti

Per quanto riguarda la registrazione, sto pensando che vorrai usare Costruzione di oggetti condizionali .

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