Я работаю над HTTP-сервером и использую Indy TIdHTTPWebBrokerBridge
с TWebModule
. Я инкапсулирую все функциональные возможности сервера в один компонент, включая компонент Indy Server и соответствующий ему веб-модуль. Однако у меня возникли некоторые проблемы с выяснением того, как заставить веб-модуль узнать компонент, из которого он был вызван.
Предположим, у меня есть этот компонент:
type
TMyComponent = class(TComponent)
private
FServer: TIdHTTPWebBrokerBridge;
end;
implementation
uses
MyWebModule;
Я знаю, что должен инициализировать это, настроив обработчик запросов, и я позаботился об этом, добавив в этот блок раздел initialization
:
initialization
if WebRequestHandler <> nil then
WebRequestHandler.WebModuleClass:= WebModuleClass;
Затем у меня есть класс веб-модуля в отдельном модуле:
uses
MyWebServer;
type
TMyWebModule = class(TWebModule)
private
FOwner: TMyComponent;
end;
Обратите внимание на приватное поле в этом веб-модуле FOwner: TMyComponent
. Вот и затрудняюсь понять, куда идти. Как назначить это соответствующему владельцу? Веб-модуль автоматически создается и управляется HTTP-сервером Indy, поэтому, насколько я знаю, у меня нет никакого контроля, чтобы установить такую вещь.
Причина, по которой мне нужен доступ к его владельцу, заключается в том, что у меня там установлены свойства, которые веб-модуль должен иметь возможность читать. Например, у моего компонента есть свойство RootDir
, которое является корневым каталогом для чтения/записи файлов. Мне нужно иметь возможность прочитать это свойство из веб-модуля.
Как я могу сделать так, чтобы веб-модуль мог читать свойства своего компонента-владельца? Или вообще, как я могу назначить это приватное поле FOwner
экземпляру моего компонента, из которого он был создан?
nil
и сразу после создания бриджа мы регистрируем в нем наш потомок вебмодуля с помощью методаRegisterWebModuleClass
предка бриджаTIdHTTPWebBrokerBridge
. Работает как шарм... :) - person Marjan Venema   schedule 28.02.2013