我有一个简单的自定义 FilterAttribute
,我用它装饰各种 ActionMethods
。
例如。
[AcceptVerbs(HttpVerbs.Get)]
[MyCustomFilter]
public ActionResult Bar(...)
{ ... }
现在,我希望向此 CustomFilter 操作添加一些日志记录。作为一个好 child ,我正在使用 DI/IoC
...因此希望将此模式用于我的自定义 FilterAttribute
。
所以如果我有以下...
ILoggingService
并希望将此添加到我的自定义 FilterAttribute
.. 我不确定如何添加。比如,我很容易做到以下几点......
public class MyCustomFilterAttribute : FilterAttribute
{
public MyCustomFilterAttribute(ILoggingService loggingService)
{ ... }
}
但是编译器错误地说装饰我的 ActionMethod
的属性(上面列出...)需要 1 个 arg ..所以我只是不确定该怎么做:(
最佳答案
我已经使用 Ninject 进行了属性注入(inject)和 Ninject.Web.MVC .
只要你从 Ninject.Web.MVC 得到 Controller 工厂,就很简单了。
例如
public class EventExistsAttribute : FilterAttribute, IActionFilter
{
[Inject]
public IEventRepository EventRepo { private get; set; }
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//Do stuff
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//Do something else if you so wish...
}
}
它的缺点是本质上具有“隐藏”依赖性,可以这么说……但是您对此无能为力。
HTH,
查尔斯
关于asp.net-mvc - 是否可以在 ASP.NET MVC FilterAttribute 上使用依赖注入(inject)/IoC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808137/