5

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

很难解释,我在解释我的班级/地区名称。为了显示: 调用逻辑

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

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

这可能吗?

4

1 回答 1

2

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

注入配置

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 等。
于 2012-12-04T14:58:19.283 回答