gpt4 book ai didi

asp.net-mvc - 基于路由数据值的 Ninject 注入(inject)

转载 作者:行者123 更新时间:2023-12-04 21:20:41 25 4
gpt4 key购买 nike

我们有一个 ASP.NET MVC 应用程序,它有许多不同的领域。有 2 个区域使用我们服务层中的相同 C# 类,但针对不同的底层数据。我希望这些服务根据路由数据中的值获得不同的依赖关系。

很难解释,我在解释我的类(class)/地区名称。为了显示:
Call logic

当“代码”在路由数据中时,我想在它不存在时注入(inject)不同的依赖项。

我知道您可以使用 .When() 方法进行条件绑定(bind),但我不确定如何从那里获取路由数据。我也可以根据调用它的区域来做,但是在我的例子中这不是最好的(我认为我们可以在其他区域使用代码)

这可能吗?

最佳答案

这对我有用(适用于标准路由配置 "{controller}/{action}/{id}" )

Ninject 配置

protected override Ninject.IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<IService>()
.To<ServiceA>()
.When(x => IsRouteValueDefined("id", null));
kernel.Bind<IService>()
.To<ServiceB>()
.When(x => !IsRouteValueDefined("id",null));
return kernel;
}
// just sample condition implementation
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() == routeValue;
}

它将使用
  • 用于路由的 ServiceA:/home/index/1、/home/index/2 等
  • ServiceB 用于路由:/,/home/index 等
  • 关于asp.net-mvc - 基于路由数据值的 Ninject 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487200/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com