delphi – 如何将参数从实例化器传递给spring4d依赖注入框架中的
发布时间:2020-12-15 10:11:27 所属栏目:大数据 来源:网络整理
导读:可以注册一个具有预期从创建点传递的参数的类吗? 我知道可以这样做: GlobalContainer.RegisterTypeTUserProcessor.ImplementsIUserUpgrader.AsTransient.DelegateTo( function: TUserProcessor begin Result := TUserProcessor.Create(GetCurrentUser); en
可以注册一个具有预期从创建点传递的参数的类吗?
我知道可以这样做: GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>. AsTransient.DelegateTo( function: TUserProcessor begin Result := TUserProcessor.Create(GetCurrentUser); end ); 但是参数被绑定到容器被注册的执行上下文,而不是对象得到实例化的位置. 这样的事情可能就是这样吗? GlobalContainer.Resolve<IMathService>([FCurrentUser]); 我知道一些peoble的拥护者拥有非常简单的构造函数,但有时候构造函数参数看起来很清楚: >构造的对象需要使用object参数,因此必须满足引用.该参数还使该约束在类中更加明显. 解决方法
我在Unity中添加了解析器覆盖.
所以你可以写: program Demo; {$APPTYPE CONSOLE} uses Classes,Spring.Container,Spring.Container.Resolvers; type IUserUpgrader = interface ['{ADC36759-6E40-417D-B6F7-5DCADF8B9C07}'] end; TUser = class(TObject); TUserProcessor = class(TInterfacedObject,IUserUpgrader) public constructor Create(AUser: TUser); end; constructor TUserProcessor.Create(AUser: TUser); begin Writeln('called constructor with passed user'); end; begin GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>; GlobalContainer.Build; GlobalContainer.Resolve<IUserUpgrader>( TOrderedParametersOverride.Create([TUser.Create])); GlobalContainer.Resolve<IUserUpgrader>( TParameterOverride.Create('AUser',TUser.Create)); Readln; end. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |