Переопределение зависимостей в NServiceBus - PullRequest
3 голосов
/ 10 октября 2011

Я хотел бы использовать профили NServiceBus для переопределения конкретных классов, используемых в внедрении зависимостей Spring.net для использования в интеграционном тестировании.

В моем классе EndpointConfig у меня настроен компонент:

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

(Этот бит в порядке!)

Я создал новый профиль:

public class StubThirdPartyProfile : NServiceBus.IProfile
{
}

И класс поведения для его реализации:

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

Оба StubCommunicator и RealCommunicator реализуют один и тот же интерфейс, и я надеялся, что профиль удалит старую зависимость и вместо этого будет использовать StubCommunicator, но это не так.Есть ли способ сделать это?

Когда решение запущено, я получаю следующую ошибку:

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 

Мы используем среду Spring.net в NServicebus, настроенную так:

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

1 Ответ

2 голосов
/ 10 октября 2011

Вместо настройки реального компонента в классе конфигурации конечной точки, рассмотрите возможность его регистрации в классе, который обрабатывает другие профили NServiceBus - Lite, Integration, Production.

...