首页 > 解决方案 > 如何注册 IFilter> 在 MassTransit 中使用 Autofac 扩展时

问题描述

我正在使用 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)

标签: c#masstransit

解决方案


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


推荐阅读