我正在研究Parsley的框架扩展,并且需要在上下文初始化期间有效地克隆ObjectDefinition
,并改变它的一些属性。
由于ObjectDefinition
本质上是不可变的,我发现我必须通过箍来创建一个新的构建器,以安全地确保已复制现有ObjectDefinition
的属性。
有没有办法从现有的ObjectDefinitionBuilder
安全地创建新的ObjectDefinition
?
如果没有,还有哪些其他替代方法可用于创建ObjectDefinition
克隆?
答案 0 :(得分: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");
}