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。

谢谢。

MVC 4与城堡温莎IOC控制器会话为空

好吧,问题出在我身上,而不是城堡。温莎!

我在构造函数中访问Session,当然,在Session对象不一定可用的时候,Castle Windsor会调用它。

我将设置会话变量的代码移到了应用程序的另一部分,与在控制器中使用会话的其他代码相处得很好。