使用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>);
无需在容器中注册?