Как зарегистрировать HttpContextBase с помощью Autofac в Asp.Net (не MVC)

Это приложение 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(), и он отлично работает.

Так в чем может быть проблема?

Спасибо,

Чи

7
задан Community 23 May 2017 в 10:34
поделиться