使用配置了autofac的Rebus处理TimeoutReply消息

时间:2015-02-01 21:55:00

标签: autofac rebus

我正在使用(外部)超时服务尝试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?

1 个答案:

答案 0 :(得分:1)

当需要处理传入的TimeoutReplyHandler时,Rebus会新建TimeoutReply - 它不应该在您的容器中:)

我猜你有一些Autofac装配扫描恰好来自TimeoutReplyHandler,最终注册了一个Rebus'内部类型,好像它是你的处理程序。

查看是否可以从容器中删除注册,可能只注册您自己的程序集中的类型。