클래스 또는 레지스트리에 컨텍스트를 제공해야합니다.
당신이 문제 세트 전체를 의사 소통하지 않는다고 생각합니다. 어댑터는 인터페이스의 객체를 조정하고 다른 인터페이스를 제공하는 구성 요소입니다. 귀하의 예제는 컨텍스트가 적응되는 것, 즉 클래스에 의해 어댑터 오브젝트를 구성하는 데 어떤 종류의 오브젝트가 적용되는지 지정하지 못합니다.
예를 들어,이 작품을 잘 :이의 장식 (구현/어댑터) 구문을 사용할 수 있지만
from zope.interface import Interface, implements
from zope.component import getGlobalSiteManager, adapts
class IWeight(Interface):
pass
class IVolume(Interface):
pass
class WeightToVolume(object):
implements(IVolume)
adapts(IWeight)
#...
gsm = getGlobalSiteManager()
gsm.registerAdapter(WeightToVolume)
, 규칙에 따라, 구현의 사용/적응이 클래스입니다 어댑터 공장에 바람직하다, 기능이 아닙니다.
어댑터가 클래스 또는 팩토리 기능 자체에 적용되는 것을 선언하지 않으면 최소한 레지스트리에 알려야합니다.
물론
gsm.registerAdapter(MyAdapterClassHere, required=(Interface,))
는,이 예는 위의 당신이 필요한 이유를 알고하지 않는 한 사용하지 않는 것이 좋습니다 어떤 상황을 적응 주장 어댑터입니다 : 같은 광범위한 경우,이 보일 수 있습니다.
"순수한"Zope 3 애플리케이션입니까? 일반적으로 Zope의 상단에 만들어진 것은 레지스트리를 제공합니다. –
@MikkoOhtamaa 분리 된 구성 요소에 대해 일부 레지스트리를 사용하는 방법을 찾고 있습니다. 하지만 내가 뭔가 잘못하고 있다고 생각합니다. 저는 zca 개념에 대한 오해가있었습니다. – Infernion
적응할 대상에 대해 명확한 아이디어가 필요합니다 (예 : 적응되는 문맥 객체는 무엇인가? 다양한 종류의 오브젝트를 적용 할 수있는 어댑터가 필요한 경우 다양한 방법으로 어댑터를 구현할 수 있지만 어댑터의 가장 간단한 경우에는/adapts로부터의 소스 인터페이스와 목적지 인터페이스 (to/implements)가 있습니다. . – sdupton