我正在使用(外部)超时服务尝试Rebus。
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
1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable
1 参数)在Autofac.Core.Resolving.InstanceLookup.Execute()
在 Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifeti meScope currentOperationScope,IComponentRegistration registration, IEnumerable` 1参数)
TimeoutReply由内部类TimeoutReplyHandler处理,它需要ctor中的IHandleDeferredMessage。 内部类DeferredMessageReDispatcher实现IHandleDeferredMessage并需要ctor中的IBus。 IHandleDeferredMessage也是内部作用域。
如何配置autofac容器以处理TimeoutReply?
答案 0 :(得分:1)
当需要处理传入的TimeoutReplyHandler
时,Rebus会新建TimeoutReply
- 它不应该在您的容器中:)
我猜你有一些Autofac装配扫描恰好来自TimeoutReplyHandler
,最终注册了一个Rebus'内部类型,好像它是你的处理程序。
查看是否可以从容器中删除注册,可能只注册您自己的程序集中的类型。