作成時点から渡されることが期待されるパラメータを持つクラスを登録することは可能ですか?
私はそれが次のようなことができることを知っています:
GlobalContainer.RegisterType<TUserProcessor>.Implements<IUserUpgrader>.
AsTransient.DelegateTo(
function: TUserProcessor
begin
Result := TUserProcessor.Create(GetCurrentUser);
end
);
ただし、パラメーターは、オブジェクトがインスタンス化される場所ではなく、コンテナーが登録される実行コンテキストにバインドされます。
たとえば、このようなことは可能ですか?
GlobalContainer.Resolve<IMathService>([FCurrentUser]);
非常に単純なコンストラクターを使用することを支持する人々を知っていますが、コンストラクターのパラメーターが明らかに適切に見える場合があります。
構築されたオブジェクトが機能するには object パラメーターが必要であるため、参照が満たされている必要があります。また、このパラメーターは、その制約をクラスで見るとより明確にします。
最初に割り当てを行わずにオブジェクトを使用しようとすると、メソッドまたはプロパティで参照を割り当て、他のすべてのメソッドで発生させて例外を発生させることができます..私はこのタイプのコードを書くのは好きではありません.コンストラクターパラメーターを使用して、そこで確認してください。コードが少ないほど、IMO は向上します。
また、渡されるオブジェクトは、コンテナーを使用して新しいオブジェクトを構築するオブジェクト (たとえば、Transaction オブジェクト) に対してローカルであり、何らかの状態を持っています (コンテナーで取得できる新しいオブジェクトではありません)。