[Zope3-Users] Using global utilities when creating an global utility

Jan-Wijbrand Kolman janwijbrand at gmail.com
Wed Jun 20 04:14:19 EDT 2007


On 6/19/07, Stephan Richter <srichter at cosmos.phy.tufts.edu> wrote:
> On Tuesday 19 June 2007 09:53, Jan-Wijbrand Kolman wrote:
> > Is there a way to overcome this? (or to put it differently, why is
> > "my" utility created when the action object is created and not just
> > before the actual registration?)
>
> Unfortunately, there is no fix for this the way you want. It is simply not
> implemented the way you expect. Having said that, I consider the urrent
> behavior a bug or a mis-feature at best. I do not see how delaying the
> instatiation would break any existing code, so changing the code would be a
> viable solution.

I had a quick look into this yesterdag. My (proably naive) idea was to
add an keyword argument to registerUtility telling that the component
is a factory and needs to be instantiated before actual registration.
Something like:

  def registerUtility(
      self, component, provided=None, name=u'', info=u'',
      event=True, is_factory=False):
     ...
     if is_factory:
         component = component()
     ...

When the action object is constructed, this is_factory argument can be
passed with it.

But:

1) Maybe this part of the discussion should be on zope3-dev, I realize

2) Phillip provided me with the following insight: "Don't register
during import time. Don't look up during registration time" [1],
which, well, makes sense to me. In that sense, the current behaviour
is not a bug at all, nor a feature. Just an implementation detail that
should not be relevant.

Maybe I need to rethink what I am trying to accomplish...

Kind regards,
jw

[1] http://permalink.gmane.org/gmane.comp.web.zope.grok.devel/1332
-- 
Jan-Wijbrand Kolman


More information about the Zope3-users mailing list