Comment écraser un composant avec castle windsor?
Je veux redéfinir une (par défaut) mise en œuvre dans un windsor-conteneur. C'est que ce Écraser? Ne fonctionne pas, cependant.
container.Register(
Component.For<IServiceOperationAuthorization>()
.OverWrite()
.Instance(_authorization)
);
D'autres Idées?
cheers,
Lars
source d'informationauteur Lars Corneliussen | 2009-03-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez très simplement faire de la place dont vous avez besoin pour remplacer la valeur par défaut de mise en œuvre. Ceci est un exemple de nos tests d'intégration. Les deux implémentations sont enregistrés, mais votre code utilise la valeur par défaut, qui est celui que vous avez enregistrés. Fonctionne comme une bombe et n'a aucun impact sur le reste de l'application:
Je suis d'accord avec Krzysztof que ce n'est généralement pas une bonne idée... Cependant, aussi loin que je peux Remplacer() permet de ne pas écraser le composant par défaut, c'est juste remplace le mode de vie défini par l'attribut (c'est à dire [Singleton]).
Si vous souhaitez remplacer un composant, vous pouvez utiliser
container.Kernel.RemoveComponent(string key)
suivie par l'enregistrement de la nouvelle composante.Voici un exemple où cette ne sens.
J'avais besoin pour passer un composant de la mise en œuvre lors de l'exécution d'un système d'intégration de la suite de tests et n'a pas de conteneur.Le noyau.RemoveComponent(). Je me suis donc retrouvé avec un simple d'installation qui prend soin de cela pour moi.
Ce serait le genre de problème qui pourrait être mieux résolu par la mise en au conteneur avec un décorateur, où vous pouvez modifier explicitement la mise en œuvre du décorateur est de diriger les appels vers ... surtout si vous souhaitez remplacer l'implémentation de composants existants (c'est à dire les singletons) ont été injectés avec qui peuvent exister pour la durée de vie de votre application.
Vraiment besoin de plus d'informations sur ce que vous essayez d'atteindre.
Voici plus d'informations sur l'enregistrement de Décorateurs à Windsor.
J'ai effectivement trouvé une solution sympa où je peux combiner des fichiers xml pour les remplacements et les utiliser couramment les inscriptions pour les valeurs par défaut.
La fluidité de l'API prend le nom complet d'une impl comme clé par défaut. À la volée, je remplace l'id de l'xml de config pour imiter la clé-des conventions de la courant de l'API.
Puis-je enregistrer le xml de config quand j'écoute de la
Kernel.ComponentRegistered
.Ensuite, j'ai seulement ajouter des services de la code-config où le xml n'a pas encore défini le service.
(il y a un moment et j'ai juste copier coller le code. nous espérons que vous obtenez le travail. Je vais faire des modifications si vous trouvez des problèmes)
Après qu'avant de m'inscrire services dans le code, je vérifie si elles ont déjà été enregistrés. J'ai également créé une classe de base qui rend cela plus facile. C'est une configuration de l'application:
La classe de base qui ne le câblage:
(L'enregistrement est de Commons.L'exploitation forestière)
Oui, il ne se redéfinir par défaut de la mise en œuvre d'un service. Pourquoi faites-vous cela? Pourquoi ne pas l'inscrire dans la première place, au lieu de redéfinir?
Pourriez-vous fournir plus de contexte?