1
2
工厂 创造 实用程序,而注册为组件的实用程序是实例。因此,如果查找注册为组件的实用程序,每次都会得到相同的对象。但是如果它注册为工厂,每次都会得到一个新的实例。 |
2
3
我认为@lennart regebro的回答可能有点不经意的欺骗。这是可以理解的,因为Zope文档有点含糊不清。我认为下面的解释是正确的,但我必须自己测试才能确定。 在 部件和工厂 注册 每次后续呼叫 到getutility,在初始注册后,将返回 同一实例 . 不同的是,component方法会将引用的对象注册为要返回的实用程序实例,其中,factory方法会调用引用的对象,并将结果存储为要返回的实用程序实例。 工厂实例例如,如果您有一个这样定义的实用程序类;
向登记;
将在执行zcml时创建myutility的实例并存储它,以便将来调用getutility;
注意,我们可以将工厂注册为一个函数而不是一个类,当不带参数调用它时,它只需要返回您想要使用的实用程序的实例。 组件示例与分量等效的例子是:
向登记;
这或多或少相当于工厂示例。唯一的区别是组件示例中返回的实例在
不要与工厂混淆这一切都不能与iFactory混淆,iFactory确实提供了一些东西,可以在每次请求时为您提供一个新实例,但使用的API略有不同。参见 this document for more information about those . |