我正在使用HTTP服務器,我正在使用Indy的TIdHTTPWebBrokerBridge
和TWebModule
。我將所有服務器功能封裝到單個組件中,其中包括Indy Server組件及其相應的Web模塊。但是,我遇到了一些問題,想知道如何讓Web模塊知道它被調用的組件。如何讓Web模塊知道它從何處被調用的所有者?
假設我有這個組件:
type
TMyComponent = class(TComponent)
private
FServer: TIdHTTPWebBrokerBridge;
end;
implementation
uses
MyWebModule;
我只知道我必須通過設置請求處理程序初始化這一點,我已經通過添加initialization
節本單位的照顧它:
initialization
if WebRequestHandler <> nil then
WebRequestHandler.WebModuleClass:= WebModuleClass;
然後,我有在一個單獨的單元中的Web模塊類:
uses
MyWebServer;
type
TMyWebModule = class(TWebModule)
private
FOwner: TMyComponent;
end;
請注意我在此Web模塊FOwner: TMyComponent
中的私人字段。這是我無法找出去哪裏的地方。我該如何將其分配給適當的所有者? Web模塊是由Indy HTTP Server自動創建和管理的,據我所知,我沒有任何控制來設置這樣的事情。
我需要訪問其所有者的原因是因爲我在那裏設置了Web模塊需要能夠讀取的屬性。例如,我的組件中有一個屬性是RootDir
,它是讀取/寫入文件的根目錄。我需要能夠從Web模塊中讀取此屬性。
如何讓Web模塊能夠讀取其所有者組件的屬性?或者一般情況下,我怎樣才能將這個專用字段FOwner
分配給我的組件實例?
爲什麼知道是誰叫它很重要?這些信息在做什麼?我傾向於遵循咒語調用者可以知道它所調用的很多內容,但被調用者應該永遠不需要知道誰在調用它。有助於保持東西分離。 – 2013-02-27 07:00:16
聽起來像一個問題,你不能有,如果你使用http://xxm.sf.net/ – 2013-02-27 09:55:20
@Marjan我通常保持東西分離,但在這種情況下Web模塊應該知道其設置?由於它全部包裝在此組件中,並且組件的屬性是主要存儲此信息的位置,因此Web模塊還可以知道這些設置?我相信下面的答案是這種情況的唯一合法解決方案。在我的情況下,這兩個單元彼此直接相關,所以它們不需要分離,它們是爲了彼此。 – 2013-02-27 15:42:20