2015-02-01 1 views
1

(외부) timeoutservice를 사용하여 Rebus를 시험 중입니다.Reble을 autofac으로 구성한 TimeoutReply 메시지 처리

TimeoutService가 TimeoutReply를 올바르게 되돌려 보냅니다. 그러면 구독자는 TimeoutReplyHandler를 호출 할 수 없다는 오류를 기록합니다.

I는 핸들러를 등록 의존성 주입 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.Resolving.ResolveOperation.GetOrCreateInstance에서 Autofac.Core.Resolving.InstanceLookup.Execute()
에서 (IC를 IEnumerable omponentContext 컨텍스트 파라미터)에 Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance (ISharingLifeti meScope currentOperationScope, IComponentRegistration 등록, IEnumerable` 1 파라미터)

TimeoutReply가 ctor에에서 IHandleDeferredMessage 필요 내부 클래스 TimeoutReplyHandler에 의해 처리된다. 내부 클래스 DeferredMessageReDispatcher는 IHandleDeferredMessage를 구현하며 ctor에 IBus가 필요합니다. IHandleDeferredMessage는 내부 범위입니다.

어떻게 TimeoutReply를 처리하도록 autofac 컨테이너를 구성해야합니까? 이 컨테이너 : 난 당신이 구하기가 발생하는 일부 Autofac 조립 검사를 추측하고

에 있어야되지 않는다 - TimeoutReply 들어오는 처리 할 필요가있을 때

답변

1

TimeoutReplyHandler는 수수께끼에 의해 newed한다 TimeoutReplyHandler, 따라서 Rebus의 내부 유형 중 하나를 귀하의 처리자 인 것처럼 등록하게됩니다.

컨테이너에서 등록을 제거 할 수 있는지 확인하십시오. 아마도 자신의 어셈블리의 유형 만 등록하면됩니다.

+0

그게 전부 였어! 이제 내부 및 외부 TimeoutService와 함께 잘 작동합니다. 그리고 MSMQ와 SQL 전송. –