web-dev-qa-db-fra.com

Comment s'inscrireType avec un constructeur PARAMETER?

Comment enregistrer le type avec le conteneur où le type n'a pas de constructeur NO PARAMETER.

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

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

34
Martin

C'est simple. Lorsque vous enregistrez le constructeur, vous passez simplement la valeur que vous souhaitez 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"));

Cela sélectionnera 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>
60
Chris Tavares

Vous pouvez également utiliser InjectionConstructor et ResolvedParameter intégrés, où connectionString est la chaîne de connexion à la 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 aller encore plus loin et avoir plusieurs instances nommées de MyObjectContext, chacune utilisant sa propre chaîne de connexion à différentes bases de données.

17
Brad