Я тестирую Rebus с (внешним) тайм-аутом.Handle TimeoutReply сообщение с Rebus, сконфигурированное с помощью autofac
TimeoutService правильно отправляет обратно TimeoutReply. Затем абонент регистрирует ошибку, которую нельзя вызывать TimeoutReplyHandler.
Я использую Autofac для инъекции зависимостей и использовать следующую конфигурацию, чтобы зарегистрировать Обработчик:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
.Where(t => t.GetInterfaces().Any(i => i.IsAssignableFrom(typeof(IHandleMessages))))
.AsImplementedInterfaces()
.InstancePerDependency()
.PropertiesAutowired();
var container = builder.Build();
adapter = new AutofacContainerAdapter(container);
Следующее исключение: не
Autofac.Core.DependencyResolutionException: Ни один из конструкторы , найденные с «Общими флагами привязки» типа «Rebus.Bus.TimeoutReplyHandler» может быть вызван доступными услугами и параметрами : Не удается разрешить параметр 'Rebus.Bus.IHandleDeferredMessage handleDeferredMessage' из конструктор 'Void .ctor (Rebus.Bus.IHandleDeferredMessage)'. на Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance (IC omponentContext контексте, IEnumerable параметров) при Autofac.Core.Resolving.InstanceLookup.Execute()
в Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance (ISharingLifeti meScope currentOperationScope, регистрация IComponentRegistration, IEnumerable` 1 параметры)
TimeoutReply обрабатывается внутренним классом TimeoutReplyHandler, который нуждается в IHandleDeferredMessage в CTOR. Внутренний класс DeferredMessageReDispatcher реализует IHandleDeferredMessage и нуждается в IBus в ctor. IHandleDeferredMessage также является внутренним.
Как настроить контейнер autofac для обработки TimeoutReply?
Это было! Теперь он отлично работает, как с внутренним, так и внешним TimeoutService. И с транспортом MSMQ и SQL. –