使用 Spring4d,您可以这样注册自定义工厂。
虽然这样做容易出错/需要添加代码才能传递所有者。有没有内置的方法可以获取一个以TComponent为参数的工厂,而不必事先在容器中注册它?
因为经常会使用
不需要在容器中注册它吗?
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>);
不需要在容器中注册它吗?