带 IoC 的轨道交通过滤器 injection/Database

Masstransit Filter with IoC injection/Database

我必须在将传入消息传递给我的消费者之前对其进行验证。 为此,我需要从数据库中请求一些数据。

按照教程,我创建了扩展方法以将我的规范 + 过滤器应用于消费者管道。像这样:

public static void UseArticlesImportValidation(this IConsumePipeConfigurator configurator){}

public class ArticlesImportValidationSpecification : IPipeSpecification<ConsumeContext<ArticlesImportNotification>>

和过滤器

public class ArticlesImportValidationFilter : IFilter<ConsumeContext<ArticlesImportNotification>>

一切看起来都不错,但我想在我的 Filter 中注入一些业务服务以重用一些功能 + DAL 服务。这对我的消费者使用 Autofac 扩展方法 builder.RegisterConsumers(Assembly.GetExecutingAssembly());.

完全没问题

我是否应该为此使用中间件?有什么建议吗?

您需要在您的规范中包含构建的容器(当您调用 AddPipeSpecification 然后在规范中作为参数很容易传递:

public void Apply(IPipeBuilder<T> builder)
{
    builder.AddFilter(new ArticlesImportValidationFilter(container.Resolve<IDataAccessSomethingUseful>()));
}

但我会在消费者中进行验证,或者,如果您想将它们分开,让一个消费者进行验证并发送下一条消息以完成实际工作。