2016-07-18 14 views
1

私はコントローラのために別々のプロジェクトを持っているMVC4ソリューションを持っています。これはすべて正常に動作します。Castle Windsor IOCコントローラを搭載したMVC 4セッションがNullです

私は今まで何度も単一プロジェクトソリューションで行ってきたように、Castle Windsor IOCを統合しました。私のWebサイトが起動するときにリポジトリの依存関係を呼び出すように正しく登録されたようです。

しかし、私のすべてのコントローラはBaseControllerクラス(コントローラを自然に継承します)を継承し、BaseControllerのコンストラクタでセッションオブジェクトにアクセスしています。

ポストキャッスルウィンザーこれはもう機能していません。 Sessionオブジェクトはnullです。ここで

は、私は、セッション変数にこのメッセージを格納していた理由は、それがCSHTMLファイルに条件文で使用されていることであるBaseController

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

     _timeoutMinutes = _systemSettingsRepository.GetSystemSettings().TimeoutMinutes; 

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

からコード

@{ 
    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の他の用途があり、コードがこの例外を越えて到達可能かどうかを判断できません。

誰もがこれが起こっている理由と解決策を提案できますか?コントローラクラスを継承するコントローラは、常にセッションにアクセスできることを理解しました。

ありがとうございます。

+0

さらに、別のコントローラープロジェクトをメインのWebプロジェクトに戻しましたが、実際にはそこにいる必要はもうなくなりました。それでも同じ問題が発生します。 – IntoNET

答えて

0

[OK]を問題が私ではなく、Castle.Windsorでした!

私はコンストラクタでセッションにアクセスしていましたが、セッションオブジェクトが必ずしも利用可能ではない場所でCastle Windsorから呼び出されました。

セッション変数をアプリケーションの別の部分に設定したコードを移動し、すべてがコントローラでセッションを使用する他のコードとよく似ています。

関連する問題