0

Unity と組み合わせた ASP.NET に問題があります。現在、認証されたユーザーを必要とするコントローラーのコンストラクターには、呼び出し元のユーザーが認証されている場合にのみ Unity によって入力できるパラメーターがいくつかあります。このようなコントローラーにつながる URL を UNAUTHENTICATED で呼び出すと、ASP.NET MVC パイプラインはコントローラーを作成しようとし、必要なオブジェクトがコンテナーに存在しないため、Unit は例外をスローします。認証には WSFederationAuthenticationModule と SessionAuthenticationModule を使用し、web.config で認証モードとして「フォーム」を構成して、ASP.NET をログイン ページに強制的にリダイレクトします。ユーザーが認証されていなくても、ログイン ページに直接リダイレクトする場合、パイプラインはコントローラー インスタンスを作成しないと予想していました。

4

1 に答える 1

0

認証されたユーザーを必要とするコントローラーのコンストラクターには、呼び出し元のユーザーが認証されている場合にのみ Unity によって入力できるいくつかのパラメーターがあります

それがあなたの問題の根源です。これは、そのサービスのコンストラクターがやりすぎていることを意味します。コンストラクターは、着信依存関係を格納する以上のことを行うべきではありません。このようにして、自信を持ってオブジェクト グラフを作成できます。

一般に、オブジェクト グラフの構築は静的でなければなりません。これは、解決されたオブジェクト グラフが実行時の条件に基づいて変更されるべきではないことを意味します (例外はありますが、これは経験則です)。ユーザーが承認されているかどうかは問題ではありません。サービス クラスは引き続き構成され、注入される必要があります。これは、データの承認とロードが後で行われることを意味します。リクエストが実際に実行された瞬間 (オブジェクト グラフが作成された直後)。

したがって、この作業をコンストラクターで行うのではなく、アクション メソッドが実行される瞬間にこの作業を移動します。このロジックを認証を行うサービスに移動したり、フィルタ属性を使用したり、デコレータを使用してこれを実装したりできます。

于 2014-02-17T10:43:39.877 に答える