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>);
コンテナに登録する必要はありませんか?