次の例があります。
Container に既に登録されている Interfaced 変数を渡して解決する簡単な方法はありますか?
または、この機能を使用する別の方法はありますか?
それが私のインターフェースです
IString = interface
function Value: string;
end;
IUser = interface
function Name: IString;
end;
ILogin = interface
function User: IUser;
function Password: IString;
end;
クラスの実装
TString = class(TInterfacedObject, IString)
private
FValue: String;
public
constructor Create(const AValue: String);
function Value: String;
end;
TUser = class(TInterfacedObject, IUser)
private
FName: IString;
public
constructor Create(const AName: IString);
function Name: IString;
end;
TLogin = class(TInterfacedObject, ILogin)
private
FUser: IUser;
FPassword: IString;
public
constructor Create(const AUser: IUser; const APassword: IString);
function User: IUser;
function Password: IString;
end;
コンテナへの登録
GlobalContainer.RegisterType<TString>.Implements<IString>;
GlobalContainer.RegisterType<TUser>.Implements<IUser>;
GlobalContainer.RegisterType<TLogin>.Implements<ILogin>;
したがって、これらのインターフェイスを作成する必要がある場合、この方法で呼び出すと、ネストされたパラメーターがコードを複雑にし、読むのが面倒になりました (そして見る)
GlobalContainer.Resolve<ILogin>([
TValue.From(
GlobalContainer.Resolve<IUser>([
TValue.From(
GlobalContainer.Resolve<IString>(['UserName'])
)
])
),
TValue.From(
GlobalContainer.Resolve<IString>(['SuperSecretPassword'])
)
]);