Rod*_*257 5 asp.net-mvc ninject inversion-of-control
我们有一个ASP.NET MVC应用程序,它具有许多不同的领域。在我们的服务层中,有2个区域使用相同的C#类,但是针对不同的基础数据。我希望这些服务根据路由数据中的值获得不同的依赖关系。
很难解释,我在解释我的班级/领域名称。为了显示:

当“代码”位于路由数据中时,我想获得与不存在时注入的不同依赖关系。
我知道可以使用.When()方法进行条件绑定,但是我不确定如何从那里获取路由数据。我也可以根据调用它的区域来执行此操作,但是在我的实例中这不是可取的(我认为我们可以在其他区域使用该代码)
这可能吗?
这对我有用(适用于标准路由配置"{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;
}
Run Code Online (Sandbox Code Playgroud)
它将使用
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |