Я хотел бы использовать профили 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);