ASP.NET MVC & Windsor. Замок: работа с HttpContext-зависимыми сервисами

использование возвращает false в onclick событии, мешает браузеру обработать остальную часть стека выполнения, который включает переходить по ссылке в атрибут href.

, Другими словами, добавляя ложь возврата мешает href работать. В Вашем примере это точно, что Вы хотите.

кнопки In, это не необходимо, потому что onclick - все, что это будет когда-либо выполнять - нет никакого href, чтобы обработать и перейти в.

12
задан alexandrul 18 May 2010 в 05:45
поделиться

2 ответа

В Castle Windsor вы можете использовать время жизни PerWebRequest , которое должно вполне соответствовать вашим требованиям.

Это означает, что вы можете просто внедрить HTTP-данные в свои службы. , и контейнер позаботится о надлежащем управлении сроком службы. Однако для этого необходимо также зарегистрировать все эти службы (и всех потребителей этих служб и т. Д.) Как PerWebRequest (или Transient), потому что, если вы зарегистрируете их как синглтоны, они сохранят устаревшие (и, возможно, удаленные) контексты.

5
ответ дан 2 December 2019 в 04:33
поделиться

Как и сказал Марк, вам необходимо зарегистрировать эти http-зависимые службы либо как PerWebRequest или Transient. Вот пример, который показывает, как зарегистрировать и внедрить HttpRequest или HttpContext:

public class Service {
    private readonly HttpRequestBase request;

    public Service(HttpRequestBase request) {
        this.request = request;
    }

    public string RawUrl {
        get {
            return request.RawUrl;
        }
    }
}

...

protected void Application_Start(object sender, EventArgs e) {
    IWindsorContainer container = new WindsorContainer();
    container.AddFacility<FactorySupportFacility>();
    container.AddComponentLifeStyle<Service>(LifestyleType.Transient);

  container.Register(Component.For<HttpRequestBase>()
      .LifeStyle.PerWebRequest
      .UsingFactoryMethod(() => new HttpRequestWrapper(HttpContext.Current.Request)));

  container.Register(Component.For<HttpContextBase>()
      .LifeStyle.PerWebRequest
      .UsingFactoryMethod(() => new HttpContextWrapper(HttpContext.Current)));  
}

Используя HttpRequestBase вместо HttpRequest , вы можете легко смоделировать его для тестирования. Также не забудьте зарегистрировать PerWebRequestLifestyleModule в своем web.config.

24
ответ дан 2 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: