使用Autofac扩展名时如何在MassTransit中注册IFilter <PublishContext <T >>

问题描述

我正在使用Autofac扩展名,但找不到如何注册具有依赖性的IFilter<PublishContext<T>>。文档建议使用UsePublishFilter(typeof(TFilter<>),context),但从何处获得context

public static ContainerBuilder RegisterMasstransit(this ContainerBuilder builder,Func<IBusRegistrationContext,IBusControl> createBusFunc,Assembly consumerAssembly = null)
{
    builder.AddMasstransit(cfg =>
    {
        if (consumerAssembly != null)
        {
            cfg.AddConsumers(consumerAssembly);
        }

        cfg.AddBus(createBusFunc);
    });

    return builder;
}

public void ConfigureContainer(ContainerBuilder builder)
{
    builder
        .RegisterMasstransit(CreateBus,Assembly.GetExecutingAssembly())
        .RegisterTelemetryCollector();
}

private IBusControl CreateBus(IBusRegistrationContext registrationContext)
{
    return Bus.Factory.CreateUsingAzureServiceBus(
        cfg =>
        {
            cfg.Host(_serviceBusConnectionString);

            cfg.UsePublishFilter(typeof(MyFilterWithDependencies<>),????);
        });
}

似乎有一个超载,但哪里可以获取ILifetimeScopeProvider

public static void UsePublishFilter(this IPublishPipelineConfigurator configurator,Type filterType,ILifetimeScopeProvider lifetimeScopeProvider)

解决方法

您应该将registrationContext作为第二个参数。