Это приложение Asp.net (не MVC), работающее под управлением .Net 3.5
Я сделал это:
protected void Application_Start(object sender, EventArgs e)
{
...
builder.Register(c => new HttpContextWrapper(HttpContext.Current))
.As()
.InstancePerHttpRequest();
}
Но это не работает
Ошибка, которую я получаю:
Нет области с тегом, соответствующим «httpRequest», видимой из области, в которой был запрошен экземпляр. Обычно это указывает на то, что запрашивается компонент, зарегистрированный как HTTP-запрос. компонентом SingleInstance() (или аналогичным сценарием). При веб-интеграции всегда запрашивайте зависимости от DependencyResolver.Current или ILifetimeScopeProvider.RequestLifetime, а не от самого контейнера.
Итак, я обнаружил следующее: https: //stackoverflow.com/a/7821781/305469
И вместо этого я сделал это:
builder.Register(c => new HttpContextWrapper(HttpContext.Current))
.As()
.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);
}
}
и я получил Null Referen Исключение.
Как ни странно, context.Response не равен нулю, когда я вызываю .Redirect(), он выдает результат.
Мне интересно, если использовать .InstancePerLifetimeScope(); это проблема.
Кстати, я попробовал использовать Response.Redirect(), и он отлично работает.
Так в чем может быть проблема?
Спасибо,
Чи