我有这样的课:
public class UrlHelperFacade:UrlHelper
{
public UrlHelperFacade(RequestContext requestContext) : base(requestContext)
{
}
public UrlHelperFacade(RequestContext requestContext, RouteCollection routeCollection):base(requestContext,routeCollection)
{
}
public new virtual bool IsLocalUrl(string url)
{
return base.IsLocalUrl(url);
}
}
我使用 NInject 在 global.asax 中绑定这个类:
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<UrlHelper>().To<UrlHelperFacade>();
return kernel;
}
然后我注入我的控制器: [Inject] public new UrlHelperFacade Url { get; 放; }
当我使用属性 Url 时,我可以获得实例,但是当调用方法时失败:“IsLocalUrl”,
这是错误:
你调用的对象是空的。
堆栈跟踪:
在 System.Web.Mvc.UrlHelper.IsLocalUrl(字符串 url)
在 CARESTREAM.RISGC.RISLite.Framework.UrlHelperFacade.IsLocalUrl(String url) 在 d:\Projects\GCRIS\SRC\Web\RISLite\CARESTREAM.RISGC.RISLite.Framework\Utility\UrlHelperFacade.cs:line 23
在 CARESTREAM.RISGC.RISLite.Controllers.AccountController.LogOn(LogOnModel 模型,字符串 returnUrl) 在 d:\Projects\GCRIS\SRC\Web\RISLite\CARESTREAM.RISGC.RISLite.Controllers\Controllers\AccountController.cs:line 76
在 lambda_method(闭包,ControllerBase,对象 [])
在 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器,Object[] 参数)
在 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext 控制器上下文,IDictionary`2 参数)
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 控制器上下文,ActionDescriptor actionDescriptor,IDictionary`2 参数)
在 System.Web.Mvc.ControllerActionInvoker.<>c_DisplayClass13.b _10 ()
在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func`1 延续)
我注意到 requestContext 的成员 HttpContext 和 RouteData 为空。无论如何都要处理这个吗?我只想让 UrlHelper 进行单元测试。