MassTransit、Autofac和2辆公交车实例

MassTransit、Autofac和2辆公交车实例,autofac,masstransit,Autofac,Masstransit,我遇到的情况是,出版商和消费者坐在同一个应用程序中。我用的是自动传真机 据我所知,我需要2个总线实例和2个端点,一个用于发布服务器,一个用于订阅服务器 我正在使用autofac,但我不知道如何创建2个总线实例,每个实例都有自己的订阅类(应该由autofac解决)。在JEE/CDI中,我会使用限定符,但就我所见,autofac没有类似的限定符(并且命名服务不是自动连接的) 所以基本上我有两个问题: 注册2个总线实例,每个实例都有一组不同的订户 稍后找到正确的实例 有什么提示可以这样做吗?它使用

我遇到的情况是,出版商和消费者坐在同一个应用程序中。我用的是自动传真机

据我所知,我需要2个总线实例和2个端点,一个用于发布服务器,一个用于订阅服务器

我正在使用autofac,但我不知道如何创建2个总线实例,每个实例都有自己的订阅类(应该由autofac解决)。在JEE/CDI中,我会使用限定符,但就我所见,autofac没有类似的限定符(并且命名服务不是自动连接的)

所以基本上我有两个问题:

  • 注册2个总线实例,每个实例都有一组不同的订户
  • 稍后找到正确的实例

有什么提示可以这样做吗?

它使用命名实例

builder.Register(c => new FooImpl())
    .As<IFoo>()
    .Named("Foo1");
builder.Register(c=>newfooimpl())
.As()
.命名为(“Foo1”);
然后

container.ResolveNamed(“Foo1”);
如果我的Autofac语法是正确的,我会从头开始。这至少会让你走上正确的道路。只需请求每个IServiceBus的一个实例,以便从您的容器中解析和创建它们

哦,您不能使用
LoadFrom
注册消费者。您必须手动解决并注册每个问题。因为调用
LoadFrom
将注册容器中的所有使用者


您可以创建两个子容器,每个
IServiceBus
一个子容器,但是现在我们已经远远超出了我所知道的如何使用Autofac来完成的领域。您可以使用几乎任何其他容器来执行此操作,因此我假设您可以使用Autofac

如果你看一下RapidTransit项目,它有使用MassTransit和Autofac的建筑服务的图书馆。您还可以从NuGet为Windows服务或Web应用程序安装软件包

您还可以看看Riktig,它使用的是RapidTransit

您可以看到如何使用Autofac中的嵌套生存期作用域在同一进程中创建多个总线实例

以及如何使用引导程序将其连接在一起:

关键在于使用:

        builder.RegisterType<ImageRetrievalStateBusInstance>()
               .As<IServiceBusInstance>();
builder.RegisterType()
.As();

这是一个实例,可以在一个实例主机中注册多个实例,为您提供多个服务。

        builder.RegisterType<ImageRetrievalStateBusInstance>()
               .As<IServiceBusInstance>();