因此,由于我使用的是 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 每次尝试解析过滤器时都构造这个过滤器?