这是一个运行 .Net 3.5 的 Asp.net 应用程序(不是 MVC)
我这样做了:
protected void Application_Start(object sender, EventArgs e)
{
...
builder.Register(c => new HttpContextWrapper(HttpContext.Current))
.As<HttpContextBase>()
.InstancePerHttpRequest();
}
但它不起作用。
我得到这个错误:
从请求实例的范围中看不到具有与“httpRequest”匹配的标记的范围。这通常表明注册为 per-HTTP 请求的组件正在被 SingleInstance() 组件(或类似场景)请求。在 Web 集成下,始终从 DependencyResolver.Current 或 ILifetimeScopeProvider.RequestLifetime 请求依赖项,而不是从容器本身.
然后我发现了这个:https ://stackoverflow.com/a/7821781/305469
而我这样做了:
builder.Register(c => new HttpContextWrapper(HttpContext.Current))
.As<HttpContextBase>()
.InstancePerLifetimeScope();
但是现在当我这样做时:
public class HttpService : IHttpService
{
private readonly HttpContextBase context;
public HttpService(HttpContextBase context)
{
this.context = context;
}
public void ResponseRedirect(string url)
{
//Throws null ref exception
context.Response.Redirect(url);
}
}
我得到了一个空引用异常。
奇怪的是, context.Response 不为空,它是在我调用 .Redirect() 时抛出的。
我想知道是否使用 .InstancePerLifetimeScope(); 是问题所在。
顺便说一句,我尝试使用 Response.Redirect() 并且效果很好。
那么可能是什么问题呢?
谢谢,
志