ASP.NET Web APIプロジェクトのアクションフィルタ属性にプロパティインジェクションを実行するための推奨場所はどこですか? MVC 3の土地では、コントローラをIoCコンテナから解決する時点でControllerActionInvoker
の独自の実装を設定し、コンテナから解決されたコンポーネントを注入するためにGetFilters()
メソッドをオーバーライドすることができます。Web APIの「System.Web.Http.Filters.ActionFilterAttribute」へのプロパティインジェクション
これはASP.NET Web APIプロジェクトでも同様の場所ですか?私は、コンテナからコントローラを解決コントローラの工場を持っているようにCreateController
方法で:
public IHttpController CreateController(HttpControllerContext controllerContext, string controllerName)
{
var controller = _kernel.Resolve<IHttpController>(controllerName);
controllerContext.Controller = controller;
controllerContext.ControllerDescriptor = new HttpControllerDescriptor(_configuration, controllerName, controller.GetType());
return controllerContext.Controller;
}
私は、注射を行うためにどこかに存在しているかどうかを確認するためにHttpControllerDescriptor
を見て持っていたが、私がすることはできません適切な場所を参照してください。正しい方向のポインタ? HttpConfiguration
の
IHttpControllerSelector
を実装し、(
Services
プロパティ)で、あなたのセレクタを登録する必要があり
'IHttpControllerSelector'はここでは役に立たない - コントローラーを正しく解決することは問題ではありませんが、これはすべて正常に動作しますが、アクションフィルタにサービスを注入することです。これは、MVC - http://www.jeremyskinner.co.uk/2008/11/08/dependency-injection-with-aspnet-mvc-action-filters/でこれを行う方法ですが、Web APIは少し異なります。 –
@RussCamはい、誤解されています。更新しました。 – Aliostad
私はあなたと同じ結果に来ました:)私のIFilterProviderはコンテナに登録されていますが、決してヒットしないようです。アクションフィルタが実行されており、フレームワークがコンテナからIFilterProviderを解決しようとしていないことを示しています。 http://aspnetwebstack.codeplex.com/のソースコードがNuGetのアセンブリと古くなっているので、少しイライラします! –