ASP.NET Web APIのninject、コンストラクタインジェクションで動作するカスタム属性/フィルタを取得するのに苦労しています。ここでASP.NET Web API Ninjectコンストラクタがカスタムフィルタと属性を挿入しました
は文字通り、私はこのフィルタと属性に関するしているすべてのコードだいくつかのコンテキストを与えるために、いくつかのスニペット...
//controller
[ApiAuthorise]
public IEnumerable<Thing> Get()
// Attribute definition with no body
public class ApiAuthoriseAttribute : FilterAttribute {}
// Custom Filter definition
public class ApiAuthoriseFilter : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{ throw new NotImplementedException(); }
}
//Ninject module for my API authorisation
public class ApiAuthoriseModule : NinjectModule
{
public override void Load()
{
this.BindFilter<ApiAuthoriseFilter>(FilterScope.Action, 0)
.WhenActionMethodHas<ApiAuthoriseAttribute>()
}}
//The registerServices(IKernel kernel) method in NinjectMVC3.cs
kernel.Load(new ApiAuthoriseModule());
です。 私が理解しているように、ninjectがそれを処理するときに、フィルタをグローバルフィルタコレクションに明示的に追加する必要はありませんが、それは正しいですか?
私の属性の中にコンストラクタを置き、そこから例外をスローすると、属性が発生していることがわかります。
私の疑惑は、私は物事のNinject側内間違ってやっているものですが、他の人を読んで午後を過ごした後、私は私のと同じように見える例は助けを求める知っている:)
TIA
もう少しプレイした後、主な原因はBindFilter <>()メソッドとSystem.Web.Http.Filters.FilterScopeとSystem.Web.Mvc.FlterScopeの違いのようです。 BindFilter()メソッドはMvc.FilterScopeを必要としますが、他のすべてのWeb APIコードはHttp.Filters.FilterScopeを参照します。 これを確認する方法があるかどうかわからない場合は... –
http://jp.wildermuth.com/2012/2/26/WebAPI_and_Ninjectへのリンクを投げ込むだけで、Googleのジュースと百万マイルも離れていない –