ASP.NET MVC Global.asax для инъекций с помощью Spring - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь вставить свойство в мое SpringMvcApplication (из Spring.Web.Mvc ).

public class MvcApplication : SpringMvcApplication
{
    public ISomeService SomeService { get; set; }

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        // Use SomeService
    }
}

Тогда у меня есть файл Services.xml, который содержит мои определения

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object name="HttpApplicationConfigurer" type="Spring.Context.Support.HttpApplicationConfigurer, Spring.Web">
    <property name="ApplicationTemplate">
      <object>
        <property name="SomeService" ref="ISomeService" />
      </object>
    </property>
  </object>
  <object id="ISomeService" type="WebProject.Services.SomeService, WebProject">
    <constructor-arg ref="UserService" />
  </object>
</objects>

Всякий раз, когда я пытаюсь использовать свойство SomeService, я получаю исключение нулевой ссылки. Моя конфигурация неверна? Нужна ли какая-либо дополнительная конфигурация?

Мой обходной путь, который пока не выглядит правильным, это

protected override void ConfigureApplicationContext()
{
    base.ConfigureApplicationContext();

    SomeService = (ISomeService)ContextRegistry.GetContext().GetObject("ISomeService");
}

1 Ответ

3 голосов
/ 04 августа 2011

MvcApplication расширяет класс SpringMvcApplication, который на самом деле устанавливает контекст Spring.net , поэтому мне кажется странным использовать di для настройки его свойств.

Метод, который вы переопределяете сейчас, предназначен для того, чтобы позволить вам в последнюю секунду внести изменения в контекст приложения Spring.net, непосредственно перед его передачей в инфраструктуру asp.net mvc.

В вашем случае, несколько лучшим решением было бы использование SomeService доступа к контексту непосредственно в его получателе.Таким образом, у вас было бы преимущество областей управляемых объектов Spring, которых у вас нет сейчас.

...