2012-07-13 41 views
2

我想用寫入db的數據庫(因此它可以在AWS上運行)替換默認的IDataBus實現(寫入文件系統)。爲此,我有一個配置擴展:如何配置一個需要注入NServiceBus的依賴關係的新的IDataBus實現?

public static class ConfigureSqlServerDataBus 
{ 
    public static Configure SqlServerDataBus(this Configure config) 
    { 
     var dataBus = new SqlServerDataBus(); 
     config.Configurer.RegisterSingleton<IDataBus>(dataBus); 
     return config; 
    } 
} 

允許我配置總線。但很明顯,我的SqlServerDataBus對某些事情有依賴性,告訴它在哪裏寫(在這種情況下,執行一個IRepository)。

通常我會通過構造函數請求依賴關係,但由於服務總線的配置是通過IWantCustomInitialization來完成的,它將使用Activator來創建我不能的實例。我的理解是,NServiceBus將使用屬性注入來滿足依賴關係,但似乎沒有這樣做。我有幾個這樣的電話我的配置完成後:

Configure 
.With() 
.DefineEndpointName("SomeName") 
.DefaultBuilder() 
.DBSubcriptionStorage() 
.XmlSerializer() 
.SqlServerDataBus() 
.MsmqTransport() 
    .IsTransactional(true) 
.UnicastBus() 
.LoadMessageHandlers() 
.CreateBus() 
.Start(() => Configure.Instance.ForInstallationOn<NServiceBus.Installation.Environments.Windows>().Install()); 


Configure.Instance.Configurer.ConfigureComponent<RepositoryImplementation>(ComponentCallModelEnum.None); 
Configure.Instance.Configurer.ConfigureComponent<SqlServerDataBus>(ComponentCallModelEnum.None); 

,但我對SqlServerDataBus制定者從來不被稱爲,雖然認沽方法。

有人能指出我做錯了什麼嗎?

回答

4

總線已經啓動後,您無法更改配置。要將您的配置調用轉換爲流暢的初始化代碼,請使用RunCustomAction方法。

或者,您可以編寫一個實現INeedInitialization並在此處進行配置調用的新類。這個類將在正確的時間被調用。

+0

最後到了今天測試這個,並使用RunCustomAction並把我的'Configure.Instance.Configurer.ConfigureComponent (ComponentCallModelEnum.None);'在那裏工作了一種享受。謝謝。 – 2012-07-26 15:13:45

相關問題