首页 > 解决方案 > 在 DI 的上下文中,如何在 MassTransit 中使用“AddMediator()”扩展方法将“IConsumeMessageObserver”连接到消费者?

问题描述

我遇到了一个难题,我不知道如何使用扩展方法IConsumeMessageObserver在 DI 上下文中添加实体。AddMediator()在该部分(https://masstransit-project.com/advanced/observers.html#received-messages)中,仅显示如何手动操作。

我试图IMediatorAddMediator()通话后解决,如下所示:

private static void BindInMemoryBroker ( IServiceCollection services )
        {
            services.AddMediator ( configuration =>
              {
                  AddInMemoryAddOnBroker ( configuration );
              } );

            var serviceProvider = services.BuildServiceProvider ();

            var mediator = serviceProvider.GetService<IMediator> ();

            var observer1 = serviceProvider.GetService<MailingObserver<RetrieveAddOnDownloadLinkContract>> ();

            var observer2 = serviceProvider.GetService<IncrementAddOnDownloadCounterObserver<RetrieveAddOnDownloadLinkContract>> ();

            mediator.ConnectConsumeMessageObserver ( observer1 );

            mediator.ConnectConsumeMessageObserver ( observer2 );
        }

        private static void AddInMemoryAddOnBroker ( IServiceCollectionMediatorConfigurator configuration )
        {
            AddInMemoryConsumers ( configuration );

            AddInMemoryContracts ( configuration );
        }

        private static void AddInMemoryConsumers ( IServiceCollectionMediatorConfigurator configuration )
        {

            configuration.AddConsumer<RetrieveAddOnDownloadLinkConsumer> ();

        }

        private static void AddInMemoryContracts ( IServiceCollectionMediatorConfigurator configuration )
        {
            configuration.AddRequestClient<RetrieveAddOnDownloadLinkContract> ();
        }

但它没有用,请帮助我

标签: asp.net-coredependency-injectionasp.net-core-webapimasstransitmediator

解决方案


有两种类型的消费观察者,一种是传递所有消息类型(IConsumeObserver),另一种是只传递一个消息类型(IConsumeMessageObserver)。后者只能连接到IBusor IMediator,因此它不能在AddMediatoror配置中进行AddMassTransit配置。

您可以添加IConsumeObserver并使用模式匹配来仅选择您需要的消息类型作为替代。


推荐阅读