IoCを使用してサービス参照をコントローラに挿入し、リポジトリ参照をサービスに挿入するASP.NET MVCアプリケーションがあります。IoCを使用すると、シングルトンにTransient Lifetimeを持つオブジェクトを注入できますか?
コントローラは、要求ごとにインスタンス化する必要があるため、一時的な存続期間が必要です。 IoCスタック全体が要求ごとに新しくなっている場合は、オーバーヘッドになります。私は、より多くの依存関係を持っています。一つの選択肢は、より多くのコントローラを持ち、それぞれがスタック内の依存性がより少ないことです。しかし、今のところそれを残しておいて、私の質問は、シングルトンとして注入されたオブジェクトに一時的な寿命がある依存関係がある場合、これらの依存関係はシングルトンによって所有されているためシングルトンのように扱われるのでしょうか?私たちは、次の
RepositoryAを持っている場合(シングルトン) ControllerA(過渡)が
ので、同じようにインスタンス化 SERVICEA
具体的には、(現在のデザインは、コンストラクタでユーザーコンテキストを注入するので、過渡にする必要がある):
public ServiceA(IRepositoryA repo) {}
public ControllerA(IServiceA service) {}
ServiceAが一度インスタンス化されるため、RepositoryAは基本的に一度インスタンス化されますか?
回答は「はい」ですが、ここで行う必要があるリファクタリングの量を確認したかっただけです。
また、設計アプローチとしてサービスとリポジトリにユーザー/リクエスト固有のインスタンス変数がないと仮定すると、シングルトンのライフタイムを使用しない理由はありますか?
本当の質問はなぜシングルトンである必要があるのでしょうか? – dotjoe
@dotjoeそれは本当の質問ではありませんが、それでもなお非常に良い点です:-)。そのようなサービスがシングルトンとして構成されていることは私には奇妙に思えます。パフォーマンス上の問題はありますか? – Steven
さらに、ビジネスロジックを含む 'Service'クラスの使用は、私が最近避けたいものです。興味のある方は、[この記事ではビジネスオペレーション/メッセージをメッセージとして定義する方法について説明しています](http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91)をご覧ください。 – Steven