ドメイン オブジェクト:
TargetObject.cs
public class TargetObject
{
public virtual ChildTargetObject ChildTargetObject
{
get { return ChildTargetObjectInner; }
set { ChildTargetObjectInner = value; }
}
public virtual ChildTargetObject ChildTargetObjectInner { get; set; }
}
構成とテスト:
var settings = new NinjectSettings
{
InjectNonPublic = true,
AllowNullInjection = true
};
var kernel = new StandardKernel(settings);
kernel.Bind<TargetObject>().ToSelf();
kernel.InterceptReplaceSet<TargetObject>(t => t.ChildTargetObjectInner,
(inv) =>
{
inv.Proceed(); // <= we never step here. Why?
}
);
var o = kernel.Get<TargetObject>();
o.ChildTargetObject = new ChildTargetObject();
最後の行では、プロパティChildTargetObjectを変更し、内部プロパティChildTargetObjectInnerを変更しています。しかし、私たちはそれを傍受しませんでした。なんで?
ChildTargetObjectの近くの「仮想」を削除すると、正常に動作します (ただし、NHiber を使用しているため、この回避策は不可能です)。
ChildTargetObjectInnerを直接変更すると (例: o.ChildTargetObjectInner = new ChildTargetObject(); )、インターセプトが発生しました。
(クラス内およびクラス外の) 変更を傍受するにはどうすればよいですか? ありがとうございました。