我试图找到一种方法来使用Ninject将构造函数依赖注入到过滤器中.我发现许多文章描述了属性注入,现在建议不要这样做,但其余文章涉及到工厂,定位器,全局包装器或存根属性的复杂设置.
使用MVC允许你覆盖它的几乎任何操作部分,我认为这只是一个创建自己的过滤器提供程序的情况,就像你创建自己的依赖项解析器一样.
什么是现在正确的注射方式,或者如果你使用某些类型的过滤器与其他过滤器变得更容易?
public class UserValidationAttribute : ActionFilterAttribute
{
private IRepository repository;
public UserValidationAttribute(IRepository repository)
{
this.repository = repository;
}
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个asp.net web api 2控制器来管理逻辑资产.像往常一样,帖子创建它并将uri返回到资源,删除删除它,但我有2个put来对资产执行单独的操作,所以我的代码如下所示:
public class Controller : ApiController
{
public IHttpActionResult Post(Stuff stuff)
{
var id = CreateNewStuff(stuff);
return CreatedAtRoute("DefaultApi", new { id = this.id }, id);
}
[HttpPut]
public IHttpActionResult ActionA(int id, ActionAStuff stuff)
{
// Perform action A
return Ok();
}
[HttpPut]
public IHttpActionResult ActionB(int id, ActionBStuff stuff)
{
// Perform action B
return Ok();
}
public IHttpActionResult Delete(int id)
{
// Delete the asset
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
为了让路由理解这一点,我的路由规则是(包括默认规则):
config.Routes.MapHttpRoute(name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}");
config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: …
Run Code Online (Sandbox Code Playgroud)