有什么方法可以使用 ActionFilterAttribute 中的过滤器,并在构造函数中放置参数,对于WebApi,这些参数将被ninject依赖性隐藏吗?
我知道,类似的东西,对于Mvc apllication非常有用,但我不知道如何为WebApi应用程序调整它。
我通过互联网搜索一些解决方案,但任何问题都没有解决我的问题。
我能成功做什么:
- api控制器,注入依赖到构造函数
- 执行空过滤器,不带任何参数
我要做什么:
- 在涉及属于控制器的动作之前,我想在构造函数中使用参数执行过滤器,其中ninject将注入依赖性作为参数。
此过滤器由我 AccessControlFilter 命名。
下面的代码编译了,但就像我告诉的那样,尽管使用了过滤器绑定了 Kernel.BindFilter<> ,带参数的过滤器仍有未加衬垫。
带过滤器的类
PATH=$PATH:~/bin
使用ninject工厂的课程
~$
在Global.asax.cs中调用ninject依赖项
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
public class AccessControlAttribute : FilterAttribute
{
}
public class AccessControlFilter : ActionFilterAttribute
{
public AccessControlFilter (IDataBaseContext context)
{
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
}
}
使用ninject依赖关系的控制器和自定义过滤器
public class NinjectFactory : System.Web.Mvc.IDependencyResolver, System.Web.Http.Dependencies.IDependencyResolver
{
protected IKernel Kernel = null;
public NinjectFactory()
{
Kernel = new StandartKernel();
Kernel.Bind<ICompanyRepository>().To<CompanyRepository>();
Kernel.BindFilter<AccessControlFilter>(System.Web.Mvc.FilterScope.Controller, 0)
.WhenControllerHas<AccessControlAttribute>();
}
public object GetService(Type type)
{
return Kernel.TryGet(type);
}
public IEnumerable<object> GetServices(Type type)
{
return Kernel.GetAll(type);
}
public System.Web.Http.Dependencies.IDependencyScope BeginScope()
{
return this;
}
public void Dispose()
{
}
}