モデルリポジトリの依存性注入-それはシングルトンですか?
-
05-07-2019 - |
質問
私のコントローラーは、インターフェースを実装し、Unityフレームワークを使用してリポジトリ実装を注入します。私の質問は、これらの注入された実装はシングルトンですか?これは、(コントローラーから)リポジトリーにアクセスするすべてのユーザーが同じインスタンスを使用するということですか?
解決 3
MSDN Unityドキュメントから取得...
ビルドするオブジェクトのライフタイムは、メソッドのパラメーターで指定するライフタイムに対応します。ライフタイムの値を指定しない場合、タイプは一時的なライフタイムに対して登録されます。つまり、Resolve ...の呼び出しごとに新しいインスタンスが作成されます...
ContainerControlledLifetimeManagerクラスのインスタンスをRegisterTypeメソッドのパラメーターに含めて、シングルトンマッピングを登録するようにコンテナーに指示します。
したがって、基本的に、シングルトンとして指定しない限り、注入は一時的です。
他のヒント
これは、ORMセッションをリポジトリインスタンスとともに実行するかどうかによって異なります。リポジトリが静的メソッドの束である場合は、気にする必要はなく、シングルトンにすることができます。それ以外の場合は、1つのWebリクエスト内でのみ状態を保持して、他のリクエストスレッドが状態に干渉しないようにします。
Unity。他のIoCフレームワークとは異なります。 Webリクエストライフタイムマネージャーごとにシングルトンは付属していませんが、簡単に実装できます。たとえば、以下を参照してください。 Unityのシングルコールコンテキスト(Webリクエスト)
いいえ、リポジトリをシングルトンにしないでください。Webアプリケーション専用です。
コントローラーファクトリーは(Unityを使用して)リポジトリーを作成し、コントローラーに注入します。