Web サービス接続 (MS Dynamics CRM のインスタンス) を必要とするいくつかのコントローラーがあり、CrmService
コントローラーがコンストラクターを介してこれを受け取るようにしたいと考えています。CRM サービスは、現在ログインしているユーザーが誰であるかに基づいたトークンを使用してセットアップする必要があります (ユーザーがアプリケーションにログインすると、CRM に対して認証され、返されたトークンをセッションに保存できます)。
Dependency Injection と Ninject を使用してこのインスタンスを提供する最善の方法がわかりません。Ninject ToMethod()
Func<> が現在のリクエストの FormsAuth/Session にアクセスして (認証されている場合はトークンを取得するために) 適切なインスタンスを作成するのは少しばかげているようです。また、ユーザーが認証されていない場合にどうなるかわかりません-これらのユーザーがコントローラーにアクセスできる必要はありませんが、コントローラーは次のようなフィルター[Authorize]
が実行される前にインスタンス化されるため、依存関係は常に満たされる必要があります. 私が読んだことから、 null を返すことは理想的ではなく、とにかくこれを行うには Ninject 構成を変更する必要があります。
コントローラーがまたは何かのインスタンスを取得できるのICrmServiceFactory
ではないかと考えていましたが、コントローラーが直接依存する他の依存関係を持つことCrmService
になる場合(そしてファクトリーに渡されたくない場合)、それは役に立ちません。
これを解決する方法についてのアドバイスをいただければ幸いです。