Csharp/C#教程:MVC请求的Ninject Contextual绑定分享


MVC请求的Ninject Contextual绑定

我有一个不寻常的情况将服务注入ASP.NET MVC控制器。 Controller提供单个动作来在页面上呈现侧栏菜单,注入Controller的服务是创建侧栏内容的工厂。 该动作使用[ChildActionOnly]属性进行修饰:侧栏只能在渲染另一个动作时渲染。

困难在于我想根据请求的页面(= Controller)注入侧栏工厂抽象的不同实例。 以前,我使用的是一种抽象工厂,它使用控制器名称字符串来确定要使用的具体工厂实现的不优雅实现; 我现在把它转移到一个合适的抽象工厂,因此需要在其他地方移动工厂类型的选择。

我的Ninject绑定目前非常简单地定义为:

 Kernel.Bind().To().InRequestScope(); Kernel.Bind().To().InRequestScope(); 

当我添加更多控制器时,我将添加第一行的更多实例。 我希望看到这个工作的方式是:

  • /bar/action请求已收到
  • 收到/baz/action要求
  • 我已经咨询了关于Contextual Binding的Ninject wiki页面,这似乎是我原则上想要 ,但我没有找到任何记录在那里显然达到我的目标。

    您可以将路径数据与Contextual-Binding结合使用

    捆绑

     // default binding - used if none of the conditions is met kernel.Bind() .To() kernel.Bind() .To() .When(x=> IsRouteValueDefined("controller", "Service")); kernel.Bind() .To() .When(x=> IsRouteValueDefined("controller", "ExtraService")); 

    IsRouteValueDefined()方法

    定义路由键并且指定的routeValue等于route key的路由值或为null时,返回true。

    上述就是C#学习教程:MVC请求的Ninject Contextual绑定分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

     public static bool IsRouteValueDefined(string routeKey, string routeValue) { var mvcHanlder = (MvcHandler)HttpContext.Current.Handler; var routeValues = mvcHanlder.RequestContext.RouteData.Values; var containsRouteKey = routeValues.ContainsKey(routeKey); if (routeValue == null) return containsRouteKey; return containsRouteKey && routeValues[routeKey].ToString().ToUpper() == routeValue.ToUpper(); } 

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/cdevelopment/957299.html

    (0)
    上一篇 2021年11月21日
    下一篇 2021年11月21日

    精彩推荐