asp.net-mvc - 是否可以在 ASP.NET MVC FilterAttribute 上使用依赖注入(inject)/IoC?

标签 asp.net-mvc dependency-injection inversion-of-control filterattribute

我有一个简单的自定义 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/

相关文章:

c# - .NET Core MVC 中的部分内容(用于视频/音频流)

java - Google Guice 属性管理

java - IOC 容器是服务定位器模式的示例吗?

asp.net-mvc - 在 MVC3 中使用带有自定义成员资格提供程序的 microsoft-mvc-helpers 包时出现问题

asp.net - MVC 4 子目录中的 web.config

java - Spring 将单例 bean 注入(inject)原型(prototype) bean 导致单例重新创建

delphi - Delphi 是否有使用 [Dependency] 等属性的 DI 框架?

c# - Unity - 如何为 COM Interop DLL 注册类型

c# - 国际奥委会设计资源

c# - IList<变量类型>;不用泛型解决