[fpc-devel] Inversion of control for TCustomHTTPModule and descendants

Michael Van Canneyt michael at freepascal.org
Tue Mar 6 20:09:12 CET 2012



On Tue, 6 Mar 2012, Sven Barth wrote:

> Am 06.03.2012 17:35, schrieb michael.vancanneyt at wisa.be:
>> 
>> 
>> On Tue, 6 Mar 2012, Sven Barth wrote:
>> 
>>> Hello together!
>>> 
>>> I'm currently playing around with fcl-web a bit.
>>> 
>>> As I'd like to utilize inversion of control (e.g. passing things like
>>> database connections through the constructor [as one possible
>>> implementation of this pattern]) for my modules I'd like to ask
>>> whether it would be an idea
>> 
>> whooohoo - expensive terminology detected !!
>> "Inversion of Control" :-)
>
> Sorry, but I don't get what you want to tell with that statement... :( (maybe 
> my brain is all smashed today after I've read the documentation of a Delphi 
> ORM ^^)

I think "Inversion of Control" is a rather expensive word for what is in fact 
a simple configurable factory pattern. All examples I've seen of this were no 
more than that. But then, IT always has been very hype prone.

>
>>> for a feature request (maybe even with patch) to add an
>>> "OnCreateModule" event to TWebHandler which is called inside
>>> TWebHandler.HandleRequest before the module is created using CreateNew
>>> or Create?
>> 
>> Well, it can only be after create. You need the instance first, and it
>> is constructed with Create(New).
>
> That's the point: add an event which creates the module with custom 
> parameters (because the module then can use a custom constructor). But see 
> below.
>
>> If you need to do something before that, there already is the
>> OnGetModule handler.
>
> But OnGetModule only returns the class, not an instance...
>
>> But yes, a centralized initialization handler for webmodules is OK.
>> Something like 'OnInitModule' or so ?
>
> That's also an idea. At least then the creation of the module is kept inside 
> TWebHandler (to use another expression: "open for extension, but closed for 
> modification" ;) )

I think it would be better to use onInitModule. In fact, I would then also 
make a AfterInitModule event in TWebModule, which is called in any case, but 
definitely after the global handler and which gets passed the TRequest.

So
  - Create
  - Global OnInitModule
  - Module-Specific AfterInitModule
  - HandleRequest

Michael.



More information about the fpc-devel mailing list