0

我正在为 Parsley 开发一个框架扩展,并且需要ObjectDefinition在上下文的初始化期间有效地克隆一个,并改变它的一些属性。

由于ObjectDefinition's 本质上是不可变的,我发现我必须跳过箍来创建一个新的构建器,以安全地确保现有的属性ObjectDefinition已被复制。

有没有办法ObjectDefinitionBuilder从现有的安全地创建一个新的ObjectDefinition

如果不是,还有哪些其他替代方法可用于创建ObjectDefinition克隆?

4

1 回答 1

0

我不确定是否有更优雅的解决方案,但我最终做了这个长手。

在我的具体情况下,我想更改注册对象的类,但保留其他属性。这是我最终使用的方法:

private function cloneDefinition(objectDefinition:ObjectDefinition,replacementClass:Class):ObjectDefinition
{
        switch (true)
        {
            case objectDefinition is DefaultSingletonObjectDefinition:
                return new DefaultSingletonObjectDefinition(ClassInfo.forClass(replacementClass),objectDefinition.id,objectDefinition.registry);
            case objectDefinition is DefaultDynamicObjectDefinition:
                return new DefaultDynamicObjectDefinition(ClassInfo.forClass(replacementClass),objectDefinition.id,objectDefinition.registry);
        }
        throw new Error("Support for cloning object definitions of type " + getQualifiedClassName(objectDefinition) + " not yet supported");
}
于 2011-08-16T12:47:19.313 回答