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