2010-10-23 3 views
28

Comment enregistrer un type avec le conteneur dans lequel le type n'a pas de constructeur PARAMETER.Comment enregistrerType avec un constructeur PARAMETER?

En fait mon constructeur accepte une chaîne, et je passe normalement dans une chaîne qui représente un chemin.

Donc, quand je le résolve, il crée automatiquement le nouveau type mais en passant une chaîne?

Répondre

52

C'est simple. Lorsque vous enregistrez le constructeur, vous passez simplement la valeur que vous voulez injecter pour le paramètre. Le conteneur correspond à votre constructeur en fonction du type de valeur (API) ou du nom du paramètre (XML).

Dans l'API, vous feriez:

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

qui choisira un constructeur qui prend une seule chaîne, et au moment de la résolution passera la chaîne « Ma chaîne ici ».

Le XML équivalent (en utilisant le schéma de configuration 2.0) serait:

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

Merci, juste ce dont j'avais besoin. – Martin

14

Vous pouvez également utiliser le dans InjectionConstructor et ResolvedParameter où connectionString est la chaîne de connexion de base de données à utiliser.

// 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>(); 

Vous pouvez prendre encore un peu plus loin et avoir plusieurs instances nommées de MyObjectContext, chacun utilisant leur propre chaîne de connexion à différentes bases de données.

Questions connexes