【问题标题】:Bind a Global Action Filter to all Controllers in an Area using MVC 3 Dependency Injection with Ninject 2.2使用 MVC 3 依赖注入和 Ninject 2.2 将全局操作过滤器绑定到区域中的所有控制器
【发布时间】:2011-03-29 21:18:56
【问题描述】:

感谢我在post 中获得的帮助,我能够使用 ASP.NET MVC 3 和 Ninject 2.2 将记录器对象注入自定义 ActionFilterAttribute。

现在我想将我的自定义 ActionFilterAttribute 仅绑定到特定区域中的所有控制器。

我能够开始使用以下绑定,但它只处理某个区域中的一个控制器。我希望我的代码绑定到特定区域中的所有控制器。有什么想法吗?

/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ILogger>().To<Log4NetLogger>().InRequestScope();
    kernel.BindFilter<TestLoggingAttribute>(
        FilterScope.Controller, 0)
            .WhenControllerType<OrganizationController>();
}

【问题讨论】:

    标签: asp.net-mvc-3 dependency-injection ninject asp.net-mvc-areas action-filter


    【解决方案1】:

    这对我有帮助,谢谢达林。但是, context.RouteData.Values 没有适合我的区域,但 context.RouteData.DataTokens["area"] 有!同样在我的情况下,我的控制器不在特定区域(例如共享控制器),因此我必须检查数据令牌区域是否为空。这对我有用:

    kernel
       .BindFilter<TestLoggingAttribute>(FilterScope.Controller, 0)
       .When((context, ad) => context.RouteData.DataTokens["area"] != null && context.RouteData.DataTokens["area"] == "Organization");
    

    【讨论】:

      【解决方案2】:
      kernel
          .BindFilter<TestLoggingAttribute>(FilterScope.Controller, 0)
          .When((context, ad) => context.RouteData.Values["area"] == "YourAreaName");
      

      或:

      kernel
          .BindFilter<TestLoggingAttribute>(FilterScope.Controller, 0)
          .When((context, ad) => context.Controller.GetType().FullName.Contains("Areas.YourAreaName"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多