2010-10-23 19 views
28

Come si registratipo con il contenitore in cui il tipo non ha il costruttore NO PARAMETER.Come registrarsiTipo con un costruttore PARAMETER?

Infatti il ​​mio costruttore accetta una stringa e normalmente passo in una stringa che rappresenta un percorso.

Quindi, quando lo risolvo, crea automaticamente il nuovo tipo ma passa una stringa?

risposta

52

È semplice. Quando si registra il costruttore, si passa semplicemente il valore che si desidera iniettare per il parametro. Il contenitore corrisponde al costruttore in base al tipo di valore (API) o al nome del parametro (XML).

Nel API, faresti:

container.RegisterType<MyType>(new InjectionConstructor("My string here")); 

che selezionerà un costruttore che prende una singola stringa, e al momento della determinazione passerà la stringa "La mia stringa qui".

L'XML equivalente (utilizzando lo schema 2.0 config) sarebbe:

<register type="MyType"> 
    <constructor> 
    <param name="whateverParameterNameIs" value="My string here" /> 
    </constructor> 
</register> 
+0

Grazie, proprio quello di cui avevo bisogno. – Martin

14

È inoltre possibile utilizzare il costruito nel InjectionConstructor e ResolvedParameter dove connectionString è la stringa di connessione al database da utilizzare.

// install a named string that holds the connection string to use 
container.RegisterInstance<string>("MyConnectionString", connectionString, new ContainerControlledLifetimeManager()); 

// register the class that will use the connection string 
container.RegisterType<MyNamespace.MyObjectContext, MyNamespace.MyObjectContext>(new InjectionConstructor(new ResolvedParameter<string>("MyConnectionString"))); 

var context = container.Resolve<MyNamespace.MyObjectContext>(); 

Si potrebbe prendere ancora un passo avanti e avere più istanze denominate di MyObjectContext, ciascuna con la propria stringa di connessione al database diversi.

Problemi correlati