NuGetのパッケージを使用しているため、ここで推奨されているように、属性とフィルターを含む単純なリポジトリ パターンを使用しています。Ninject.Web.WebApi-RC
これは最初のリクエストで機能しますが、DbContext
リクエストの範囲内にあるため、後続のすべてのリクエストで破棄されます。
ここに私の属性があります:
public class CommunicationKeyValidationAttribute : FilterAttribute
{
}
これが私のフィルターです:
public class CommunicationKeyValidationFilter : AbstractActionFilter
{
public CommunicationKeyValidationFilter(IRepository repository)
{
this.repository = repository;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
// do stuff
}
}
これが私のリポジトリです:
public class Repository : IRepository
{
public Repository(MyDbContext dbContext)
{
this.dbContext = dbContext;
}
}
これが私のNinjectバインディングです:
this.Kernel.Bind<MyDbContext>().ToSelf().InRequestScope();
this.Kernel.Bind<IRepository>().To<Repository>().InRequestScope();
this.Kernel.BindHttpFilter<CommunicationKeyValidationFilter>(FilterScope.Action)
.WhenActionMethodHas<CommunicationKeyValidationAttribute>()
.InRequestScope();
私のコントローラーは次のようになります。
public class HomeController
{
[CommunicationKeyValidation]
public ActionResult Index()
{
// do stuff
}
ここでの問題は、コンストラクターがCommunicationKeyValidationFilter
最初の要求でのみ呼び出されることです。フィルターを解決しようとするたびに、ninject にこのフィルターを構築させる方法はありますか?