MVC 4与城堡温莎IOC控制器会话为空
本文关键字:控制器 会话 IOC 城堡 MVC | 更新日期: 2023-09-27 17:57:36
我有一个MVC4解决方案,它有一个单独的控制器项目。这一切都很好。
我现在已经像以前在单个项目解决方案中多次集成了Castle Windsor IOC,它似乎已经正确注册,因为当我的网站启动时,它会调用具有存储库依赖性的HomeController。
然而,我的所有控制器都继承了一个BaseController类(它自然继承了Controller),并且在BaseController的构造函数中,我正在访问Session对象。
后城堡温莎这不再工作。Session对象为null。
这是BaseController 的代码
protected BaseController(ICustomerRepository customerRepository, ISystemSettingsRepository systemSettingsRepository)
{
_customerRepository = customerRepository;
_systemSettingsRepository = systemSettingsRepository;
_timeoutMinutes = _systemSettingsRepository.GetSystemSettings().TimeoutMinutes;
Session["KYCWarning"] = _customerRepository.GetMessage("KYCWarning");
}
我将此消息存储在Session变量中的原因是它用于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>
}
这只是一个例子,在控制器中还有Session的其他用途,我预计如果代码可以通过此异常访问,它们将失败。
有人能提出为什么会发生这种情况,以及解决方案吗?我知道继承controller类的控制器总是可以访问Session。
谢谢。
好吧,问题出在我身上,而不是城堡。温莎!
我在构造函数中访问Session,当然,在Session对象不一定可用的时候,Castle Windsor会调用它。
我将设置会话变量的代码移到了应用程序的另一部分,与在控制器中使用会话的其他代码相处得很好。