Петрушка: Создание ObjectDefinitionBuilder из ObjectDefinition - PullRequest
0 голосов
/ 16 августа 2011

Я работаю над расширением фреймворка для Parsley, и мне необходимо эффективно клонировать ObjectDefinition во время инициализации контекста и изменить некоторые его свойства.

Поскольку ObjectDefinition по своей природе неизменны, я обнаружил, что мне нужно перепрыгнуть через обручи, чтобы создать новый компоновщик, который безопасно гарантирует, что свойства существующих ObjectDefinition были скопированы.

Есть ли способ безопасно создать новый ObjectDefinitionBuilder из существующего ObjectDefinition?

Если нет, какие существуют другие альтернативы для создания клона ObjectDefinition?

1 Ответ

0 голосов
/ 16 августа 2011

Я не уверен, что есть более изящное решение, но в итоге я сделал эту длинную руку.

В моем конкретном случае я хочу изменить класс зарегистрированного объекта, но сохранить другие свойства. Вот подход, который я использовал в итоге:

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");
}
...