3

Web Api メソッド内で依存性リゾルバーを使用しようとしています。これは正常に機能し、DepedencyResolver.GetService() を使用した従来の ASP.NET MVC でも正常に機能します。

しかし、これを WepApi メソッド内で機能させることはできません。

私の登録では、すべてのインスタンスを InstancePerApiRequest として登録します。WebAPIConroller のコンストラクターのブートストラップに登録したすべてのタイプのいずれかを追加すると、正常に注入されますが、内部で呼び出すと注入されなくなります。

私の言うGet Methodでこのように

var userRepository = (IUserRepositoryu)GlobalConfiguration
       .Configuration.DependencyResolver.GetService(typeof(IUserRepository));

no scope WebRequest エラーが発生しました。奇妙なことは、すべてを GlobalConfiguration に変更する前に、ベータ版で問題なく機能していたことです。

私の質問は、以前のように webAPI の有効期間内で Autofac 登録済みアセンブリをアクティブ化するにはどうすればよいですか?

私のエラー:

「「AutofacWebRequest」に一致するタグを持つスコープは、インスタンスが要求されたスコープからは見えません。これは通常、HTTP ごとの要求として登録されたコンポーネントが、SingleInstance() コンポーネント (または同様のシナリオ) によって要求されていることを示しています。 Web 統合の下では、コンテナー自体からではなく、常に DependencyResolver.Current または ILifetimeScopeProvider.RequestLifetime から依存関係を要求します。"

 var resolver = new AutofacWebApiDependencyResolver(container);
 configuration.DependencyResolver = resolver;
4

3 に答える 3

5

Web APIでは、グローバル依存関係リゾルバーを使用してグローバルインスタンスにアクセスします。リクエストごとのサービスは、WebAPIがリクエストを処理するために作成する依存関係スコープから取得されます。Web APIに現在の依存関係スコープにアクセスする方法があるかどうかはわかりませんが、知っておくと面白いでしょう。

ここでの最良のオプションは、このように直接リゾルバーを呼び出すのではなく、依存性注入を使用することです。この呼び出しを行うには、コードのどの部分が必要ですか?

于 2012-06-22T06:29:19.560 に答える
0

AutoFacはASP.NETWebAPIと統合されており、使用を検討しています。

また、WebAPiの依存関係リゾルバーはASP.NET MVCとは少し異なるため、WebAPIに適したリゾルバーを実装してWebAPI構成に追加したことを確認してください。

http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

于 2012-06-20T18:07:17.097 に答える