A recent simplification was made to adapter and utility registration. When registering adapters, the provided interface can be ommitted if the registered factory implements a single interface. Similarly, when registering utilities, the provided interface can be ommitted if the registered component provides a single interface.

The intent is that if you have something like:

  class MyClass:
      implements(IFoo)

      ...

you do not have to repeat IFoo in the registration.

The current scheme runs into problems if you use inheritence:

  class MyClass(SomeBase):
      implements(IFoo)

Then declarations in the base class cause the subclass
to implement multiple interfaces.

I'd like to make the following change to algorithm for determing
the provided interface if nothing is specified in the rgistration:

  For adapters, if the registered factory directly implements
  a single interface, then that interface will be used.  Inherited
  interfaces will not be considered.  If the factory directly implements
  no interfaces or more than one interface, then a provided interface
  must be provided in the registration.

  For utilities, if the registered component directly provides no
  interfaces and its class directly implements
  a single interface, then that interface will be used.  Inherited
  interfaces will not be considered.  If the component directly
  provides any interfaces or if its class directly implements
  no interfaces or more than one interface, then a provided interface
  must be provided in the registration.

So, for example, if we have:

  class B:
     implements(IB)

  class S(B)
     implements(IS)

we can register S or an instance of S without specifying a provided
interface.  The interface IS will be used.

However, with:

  class S2(B):
     pass

You would have to sp[ecify a provided interface if you registered S2
or an instance of S2.

Thoughts?

Jim

--
Jim Fulton           mailto:[EMAIL PROTECTED]       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org
_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com



Reply via email to