2016-12-14 29 views
0

我必須在傳入消息之前驗證傳入的消息。 要做到這一點,我需要從數據庫中請求一些數據。Masstransit過濾IoC注入/數據庫

繼教程之後,我創建了擴展方法來將我的規範+過濾器應用於使用者管道。事情是這樣的:

public static void UseArticlesImportValidation(this IConsumePipeConfigurator configurator){} 

public class ArticlesImportValidationSpecification : IPipeSpecification<ConsumeContext<ArticlesImportNotification>> 

和篩選

public class ArticlesImportValidationFilter : IFilter<ConsumeContext<ArticlesImportNotification>> 

一切看起來不錯,但我想注入一些商務服務,我過濾器重複使用某些功能+ DAL服務。這對我的消費者使用Autofac擴展方法builder.RegisterConsumers(Assembly.GetExecutingAssembly());完全正常。

我應該使用中間件嗎?有什麼建議麼?

回答

1

你需要有內置容器中的規範(很容易,當你調用AddPipeSpecification,然後在說明書中對作爲參數傳遞:

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

但我會在消費者如果驗證或,你想,讓他們獨立,有一個消費者來驗證併發送一條消息給做實際工作。

+0

這就是我最終做到了,是什麼讓消費者內部驗證的原因嗎?或者有兩個消費者?贏」它使信息的流動複雜化了嗎? –

+0

它取決於(tm)。在我的解決方案中,我實現了CQRS我需要發送一個有效的命令給我的域模型。這意味着發件人必須預先驗證這些內容。在我有一些不受信任的發件人的情況下,我介紹了這種驗證的中間步驟,但由於它不適用於所有人,因此總是運行此驗證將是矯枉過正的。因此,我滑倒它。另外,如果驗證失敗,你會怎麼做?如果你有一個消費者 - 你可以發回消息說「離開」,這是一個很好的做法。 –

+0

@JevgenijNekrasov有在github問題https://github.com/MassTransit/MassTransit/issues/737類似的事情,可能是這將有助於太。 –