我正在尝试使用(外部)超时服务的 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” '无效.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(ISharingLifetimeScope currentOperationScope, IComponentRegistration 注册, IEnumerable`1 个参数)
TimeoutReply 由内部类 TimeoutReplyHandler 处理,它需要 ctor 中的 IHandleDeferredMessage。内部类 DeferredMessageReDispatcher 实现了 IHandleDeferredMessage 并且需要 ctor 中的 IBus。IHandleDeferredMessage 也是内部作用域的。
我应该如何配置 autofac 容器来处理 TimeoutReply?