1

У меня есть решение MVC4, которое имеет отдельный проект для контроллеров. Все это прекрасно работает.MVC 4 с замком Windsor Контроллеры IOC Сессия Null

Я теперь интегрировал Castle Windsor IOC, как я уже много раз делал в одном проекте, и, похоже, он зарегистрировался правильно, когда мой веб-сайт запускает его, вызывает в HomeController с зависимостями репозитория просто отлично.

Однако все мои контроллеры наследуют класс BaseController (который естественным образом наследует контроллер), а в конструкторе BaseController я обращаюсь к объекту Session.

Почтовый замок Виндзор это больше не работает. Объект Session имеет значение null.

Вот код из BaseController

protected BaseController(ICustomerRepository customerRepository, ISystemSettingsRepository systemSettingsRepository) 
    { 
     _customerRepository = customerRepository; 
     _systemSettingsRepository = systemSettingsRepository; 

     _timeoutMinutes = _systemSettingsRepository.GetSystemSettings().TimeoutMinutes; 

     Session["KYCWarning"] = _customerRepository.GetMessage("KYCWarning"); 
    } 

Причина я храню это сообщение в переменной сеанса является то, что она используется в техническом состоянии в файле cshtml

@{ 
    var kycWarning = Session["KYCWarning"].ToString(); 
    var settingShowKYCReminder = ConfigurationManager.AppSettings["ShowKYCReminder"]; 
    var showKYCReminder = !string.IsNullOrWhiteSpace(settingShowKYCReminder) && (bool.Parse(settingShowKYCReminder)); 
} 

@if (showKYCReminder && Session["CurrentSession"] != null && !string.IsNullOrWhiteSpace(kycWarning) && !((SessionModel)Session["CurrentSession"]).Customer.KycAuthorised) 
{ 
    <div class=""> 
     <div class="col-md-12 WarningMessageBox"> 
      <span>@kycWarning</span> 
     </div> 
    </div> 
} 

Это только один пример, есть и другие применения сеанса в контроллерах, и я ожидаю, что они не сработают, если код достигнет этого исключения.

Может кто-нибудь предложить, почему это происходит, и решение? Я понял, что контроллер, который наследует класс Controller, всегда будет иметь доступ к Session.

спасибо.

+0

В дополнение к этому - я переместил проект отдельных контроллеров обратно в основной веб-проект, так как на самом деле больше не было необходимости в нем. Та же проблема все еще возникает. – IntoNET

ответ

0

Хорошо, проблема была со мной, а не с замком. Уиндсор!

Я получал доступ к сеансу в конструкторе, который, конечно же, называется Castle Windsor в точке, где объект Session необязательно доступен.

Я переместил код, устанавливающий переменные сеанса в другую часть приложения, и все хорошо с другим кодом, который использует Session в контроллерах.

Смежные вопросы