3

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>);

コンテナに登録する必要はありませんか?

4

2 に答える 2