2012-04-18 40 views
1

我正在維護一個大型應用程序,大量使用StructureMap來加載它的組件。我試圖拆分組件,以便它們可以在不同的機器上運行,並通過網絡連接。它們已經在不同的線程中運行,但在同一個進程中(使用單個StructureMap容器​​)。如何在幾臺機器上分配IOC/DI組件?

我不知道如何做到這一點。是否可以讓StructureMap自動爲所有組件創建一個代理並通過網絡而不是本地使用它們?需要對組件進行哪些更改才能使其可分發?

回答

1

有趣!從理論上講,我猜這是可能的,真正的根本問題是如果你真的想這樣做,我們正在談論一個重大的架構變革。我不知道你對WCF有多熟悉,我會試圖非常粗略地解釋我是如何想象它是可能的,但考慮一下,如果我們正在通過你想要的網絡談論這種通信使用WCF。

  • 定義要使用在網絡上作爲一個WCF服務合同
  • 與服務包裝你的組件和收留他們的地方/在某種程度上
  • 寫的客戶提供這些服務組件的每個接口,讓他們實現你的組件接口
  • 讓StructureMap注入你的客戶端時,代碼需要一個組件

雖然這聽起來很簡單,相關的複雜性我隱藏在這些步驟之後。爲了說明我的頭腦中的一些潛在問題:哪些組件將打包到服務中?包裝他們會有多容易?你要去哪裏舉辦他們,怎麼樣?安全性如何?你的記錄機制是否需要調整?

+0

是的,我很熟悉WCF。這幾乎是我考慮的方法:)但是,我對StructureMap不是很熟悉 - 但是從你寫的內容來看,我認爲SM沒有提供手段來自動執行你概述的步驟,所以我必須自己實現它們並讓它SM知道使用WCF客戶端而不是服務實例本身。我還必須爲服務本身提供不同的管理員,因爲如果我理解正確,SM不允許遠程服務管理。 – mafu 2012-04-18 14:07:41

+0

SM只是一個IoC容器,我不知道任何容器讓你的實例變得很遙遠,因爲它是一個複雜的過程,幾乎不能自動執行(見前面的關注列表)。所以是的,你應該連接SM,以便它使用客戶端代理而不是組件實例;如果對於經理你是指主人,是的,你還需要爲你的服務設置一個主機。 – 2012-04-18 14:26:54

+0

具有完美的感覺。 – mafu 2012-04-18 15:00:11

相關問題