【发布时间】:2015-12-15 04:05:05
【问题描述】:
使用Spring4d,你可以像这样注册自定义工厂
aContainer.RegisterInstance<TFunc<string, TMyObject>>(function(aName : string):TMyObject
begin
Result := TMyObject.Create(aName);
end);
以这种方式,我相信对于从 TComponent 继承的每个依赖项,想要传递所有者的人会这样做
// Registrations
aContainer.RegisterInstance<TFunc<TComponent, TMyObject>>(function(Owner : TComponent):TMyObject
begin
Result := TMyObject.Create(Owner);
end);
// Then in code
constructor TMyClass.Create(aFctry : TFunc<TComponent, TMyObject>);
begin
fObj := aFctry(Self);
end;
或者也可以
aContainer.RegisterType<TMyObject, TMyObject>;
// In code
constructor TMyClass.Create(aObj : TMyObject);
begin
fObj := aObj;
InsertComponent(aObj);
end;
不过,这很容易出错/添加代码只是为了传递所有者。有没有一种内置的方法来获取一个将 TComponent 作为参数的工厂,而无需事先在容器中注册它?
因为我经常会使用
constructor MyObject.Create(aDep : TFunc<TMyDep>);
不注册TFunc<TMyDep>依赖,只注册TMyDep类型。
可以传递类似的东西
constructor MyObject.Create(aDep : TFunc<TComponent, TMyDep>);
无需在容器中注册?
【问题讨论】:
标签: delphi dependency-injection spring4d