2009-12-22 9 views
8

J'ai une classe avec deux cteurs. Un sans paramètre et un avec des paramètres.
L'unité prendra par défaut l'approche progressive et ira pour le dernier ctor.Définition du constructeur sans paramètre en tant que constructeur d'injection dans la création de conteneur

Comment puis-je définir quel ctor utiliser (je veux sans paramètre) sans ajouter de dépendance à Unity dans mes classes? Je pense qu'il est possible de le faire dans ma création de conteneur, mais je ne sais pas comment.

entrée Actuellement mon inscription ressemble à ceci:

container.RegisterType<IConfigurationService, SqlConfigurationService>() 

MISE À JOUR
J'essaie d'éviter la programmation en XML (fichier de configuration), autant que possible.

EXTRA
Comment s'inscrire (doit être injecté qui lui est tour) un constructeur avec un paramètre?
Say ILoggerService est déjà enregistré et je veux utiliser le constructeur

public SqlConfigurationService(ILoggerService logger){} 

Répondre

16

Je n'ai pas l'unité à proximité en ce moment, mais pour autant que je me souvienne, vous pouvez faire quelque chose comme ceci:

container.RegisterType<IConfigurationService, SqlConfigurationService>(
    new InjectionConstructor()) 
+0

Merci :) Avez-vous par hasard aussi savoir comment résoudre ma question supplémentaire (bas de OP)? –

+0

Estimation totale après avoir regardé un peu les documents de l'API: 'container.RegisterType (nouveau InjectionConstructor (nouveau ResolvedParameter ()));' –

0

Je pense que vous pouvez également passer dans un InjectionConstructor (y compris ResolvedParameter<T> s pour les paramètres) dans votre inscription. Avez-vous essayé cela?

0

Vous pouvez appliquer l'attribut InjectionConstructor au constructeur que vous souhaitez utiliser. Cela présente cependant l'inconvénient de déplacer une certaine configuration de conteneur loin d'un emplacement central.

+0

Je ne veux ajouter aucune dépendance dans mes classes réelles (réf OP) –