我正在通过SQL Server使用rebus,并使用rebus.autofac库与Autofac进行连接。我在使用本地数据库时遇到了麻烦,但是当我转向使用开发服务器时,发现消息没有通过。
将我的本地数据库和服务器数据库进行比较,似乎预订表在服务器上为空,但在我的本地上已填充。我不记得在本地调用“订阅”了,我的现有代码也没有,但是我必须过去做过。
是否有一种方法可以获取处理程序的注册,从而还可以设置已处理消息的订阅?还是我必须手动进行?
可能我可以扫描程序集的“ IHandleMessages”的每个实现,然后在构建总线时对其进行注册,但是我该如何参与总线的构建?
下面是创建容器后手动扫描的示例:
var bus = container.Resolve<IBus>();
Task.WaitAll(container
.ComponentRegistry
.Registrations
.SelectMany(reg => reg.Activator.LimitType.GetInterfaces())
.Where(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IHandleMessages<>))
.Select(t => t.GenericTypeArguments[0])
.Distinct()
.Select(msg => bus.Subscribe(msg)).ToArray());