Возможно зарегистрировать класс с параметром, который, как ожидается, будет передан от точки создания?delphi - как передать параметр из объекта-указателя в конструктор в рамки впрыска зависимостей spring4d?
Я знаю, что это можно сделать что-то вроде этого:
GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>.
AsTransient.DelegateTo(
function: TUserProcessor
begin
Result := TUserProcessor.Create(GetCurrentUser);
end
);
Но параметры переплетены в контекст выполнения, когда контейнер регистрируется и не там, где объект прибудет-х intantiated.
Что-то подобное возможно, например?
GlobalContainer.Resolve<IMathService>([FCurrentUser]);
Я знаю, что некоторый peoble адвокат имеет очень простые конструктор, но бывают случаи, когда параметр конструктора явно выглядит путь:
Объект построен нуждается параметром объекта для работы, поэтому ссылка должна быть удовлетворена. Параметр также делает это ограничение более очевидным, глядя на класс.
Вы можете назначить ссылку в методе или свойстве, а также повысить и исключить в каждом другом методе, если вы попытаетесь использовать объект без предварительного присваивания. Мне не нравится писать этот тип кода, это просто тратить время, просто используйте параметр конструктора и проверьте там. Меньше кода, тем лучше ИМО.
Также передаваемый объект является локальным для объекта, который создает новый объект с использованием контейнера (например, объекта Transaction) и имеет некоторое состояние (это не новый объект, который я могу получить с контейнером).
Я не знаю перегрузку '' TContainer.Resolve принимающей параметр массива в Spring4D. Я что-то пропустил? –
menjaraz
@menjaraz Это было просто и идея о том, как это можно реализовать (наверняка это может быть donde с RTTI) –
Хорошо, это звучит как запрос функции. Почему бы не опубликовать это также в [spring4d Google Group] (http://groups.google.com/group/spring4d)? – menjaraz