Castle Windsor 3.2 は、コンテナー内の診断ログという優れた追加機能を提供します。これにより、コンテナー ログを、アプリケーション ログの保存に使用されている log4net ログ ファイルにリダイレクトすることができました。
私が今やりたいことはException
、オプションのプロパティを注入している間にコンテナが検出したものを実際にキャッチできるようにすることです。
私の特定の状況では、 Castle が私のコードを実行してクラスにプロパティを注入しようとしたときに、Oracle
データベース エラーが発生しました。ORA-28000: the account is locked
Database
BaseController
public class BaseController : Controller
{
/// <summary>
/// Repository interface injected by Castle Windsor IoC container.
/// See <see cref="MyProject.Widgets.CastleWindsor.Facilities.PersistenceFacility.Init()"/> for more information.
/// </summary>
public ILogRepository Database { get; set; }
}
このDatabase
プロパティはnull
、から継承するコントローラーのアクション メソッド内にいるときですBaseController
。これはすべて、Castle Windsor が例外を「飲み込む」ために発生します。ユーザーが受け取る唯一のメッセージは次のとおりObject reference not set to an instance of an object
です。わかりましたが、実際の例外/理由をユーザーに表示したいと思いますORA-28000: the account is locked
。このメッセージは、前述の診断ログのおかげで、Castle Windsor によってログに記録されます。catch
これはクールですが、ブロック内で例外を実際にキャッチできるようにしたいと考えています。
public class SubCatListController : BaseController
{
public ActionResult SubCatList(string subcat)
{
try
{
var sub = Database.GetLogSubCategory(subcat);
}
catch(Exception e) // I'd like to get the real exception from Castle Windsor here...
{
Logger.Error(e.Message, e);
}
}
}
このシナリオはプロパティ インジェクションで可能ですか?