【发布时间】:2015-02-23 16:11:07
【问题描述】:
创建内核时,我不断收到错误“System.Web.HttpException:请求在此上下文中不可用”。考虑到我的一个绑定依赖于上下文,这是有道理的。显然,Application_Start 上不应存在上下文。我只是想知道是否有人知道如何解决这个问题。
public class NinjectBindings : NinjectModule
{
public override void Load()
{
//Framework
Bind<IJsonLayer>().To<JsonLayer>();
Bind<IBusinessLayer>().To<BusinessLayer>();
//Controllers
Bind<ITeamController>().To<TeamController>();
}
}
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
ReflectionUtility.Kernel = new StandardKernel(new NinjectBindings());
}
}
public class ReflectionUtility
{
private static IKernel _kernel;
public static IKernel Kernel {
set { _kernel = value; }
}
}
public class JsonLayer : IJsonLayer
{
private readonly ITeamController _teamController;
private readonly IBusinessLayer _businessLayer;
public JsonLayer(ITeamController teamController, IBusinessLayer businessLayer)
{
_teamController = teamController;
_businessLayer = businessLayer;
}
}
public class BusinessLayer : IBusinessLayer
{
//this is a super-simplification of what's going on. there are multiple different calls to HttpContext.Current.Request in this class
public BusinessLayer()
{
//This is where it breaks
var sessionUserId = HttpContext.Current.Request.Headers["X-SessionUserId"];
}
}
public class TeamController : ITeamController
{
public void DeleteTeam(int intTeam)
{
throw new NotImplementedException();
}
}
【问题讨论】:
-
我不会从
HttpContext中建立依赖关系,只是当您设置一个包含注入服务的变量时,我会将HttpContext分配给一个属性。只是因为它让生活更轻松。
标签: c# .net ninject global-asax httpcontext