2012-12-06 50 views
1

由於NServiceBus在內部使用autofac,我應該通過nservicebus註冊我的綁定還是應該像往常一樣使用模塊和綁定來安裝AutoFac?如果是這樣,因爲我有一個Windows服務項目,我在哪裏啓動autofac設置?在我的EndPointConfig.cs中?NServiceBus - 如何使用autofac註冊我自己的模塊

請注意,這是我自己的綁定,而不是自動註冊自己的IBus。

回答

0

在所有容器可用的情況下,端點配置中會有一個超載,以便在容器的實例中傳遞,應該使用所有容器加載該容器。從那裏,NSB將添加其內部的東西,一切都將爲您提供。

Configure.With().AutofacBuilder(builder)... 
+0

有沒有一種方式,你可以訪問容器,當您收到的事件? (在實施IHandleMessages 。)我有一個多租戶應用程序,並且該事件包含與該消息相關的域。在使用NSB之前,我通過在接收每個事件時將域作爲BeginLifetimeScope的參數來解決問題。我需要域名查找特定租戶的正確連接字符串。 – jacderida

+0

幾個選項,你可以使用消息頭嗎?另一個需要考慮的事情是使用IManageUnitsOfWork,它會讓你在每條消息之前和之後插入。 –

+0

是的,我最終通過使用消息增變器將域添加到消息頭中來解決問題。然後我建立了自己的Autofac容器,我在init中註冊了它。主機名稱提供程序使用解析IBus的委託方法進行註冊,然後使用總線上的CurrentMessageContext從頭文件獲取主機名稱。只要它是每個生命週期的註冊範圍,一切正常! – jacderida

0

我有一個單獨的類實現INeedInitialization。在它的Init方法中,我配置了DI。

例如:

using NServiceBus; 
using NServiceBus.Config; 

public class DependencyInjection : INeedInitialization 
{ 

    public void Init() 
    { 
     Configure.Instance.Configurer.RegisterSingleton<ISomeInterface>(
      new SomeClassImplementingInterface()); 
    } 
} 
+0

仍然你的NServiceBus端點必須有一個對實現類型的引用:「new SomeClassImplementingInterface()」,它除了IoC之外都是。你真正需要的是使用某種標記接口/屬性進行程序集掃描 – Marco