2011-10-10 2 views
3

Je souhaite utiliser les profils NServiceBus pour remplacer les classes concrètes utilisées dans l'injection de dépendance Spring.net pour les tests d'intégration.Dépendance des dépendances dans NServiceBus

Dans ma EndpointConfig classe, j'ai un composant étant configuré:

NServiceBus.Configure.Instance.Configurer.ConfigureComponent<RealCommunicator>(ComponentCallModelEnum.None); 

(Ce bit est OK!)

J'ai créé un nouveau profil:

public class StubThirdPartyProfile : NServiceBus.IProfile 
{ 
} 

Et un comportement classe pour l'implémenter:

public class StubThirdPartyBehaviour : IHandleProfile<StubThirdPartyProfile> 
{ 
    public void ProfileActivated() 
    { 
     Configure.Instance.Configurer.ConfigureComponent<StubCommunicator>(ComponentCallModelEnum.None); 
    } 
} 

Les deux StubCommunicator et RealCommunicator implémenter la même interface et j'espérais que le profil supprimerait l'ancienne dépendance et utiliser le StubCommunicator à la place, mais ce n'est pas le cas. Y a-t-il un moyen de faire cela?

Lorsque la solution est exécutée, je reçois l'erreur suivante:

Spring.Objects.Factory.UnsatisfiedDependencyException: 
Error creating object with name 'Namespace.CommandHandler' : 
Unsatisfied dependency expressed through object property 'Communicator': 
There are 2 objects of Type [Namespace.ICommunicator] for autowire by type, 
    when there should have been just 1 to be able to autowire property 'Communicator' of object 

Nous utilisons le cadre Spring.net dans NServicebus configuré comme ceci:

Configure.With().SpringFrameworkBuilder() 
       .XmlSerializer().Log4Net() 
       .MsmqTransport() 
       .IsTransactional(true); 

Répondre

2

Au lieu de configurer le réel Dans la classe de configuration endpoint, considérez l'enregistrement dans une classe qui gère les autres profils NServiceBus - Lite, Integration, Production.

+0

Merci Udi, c'est ce que j'ai fini par faire. À votre santé – user987506

Questions connexes