Domain object:
TargetObject.cs
public class TargetObject
{
public virtual ChildTargetObject ChildTargetObject
{
get { return ChildTargetObjectInner; }
set { ChildTargetObjectInner = value; }
}
public virtual ChildTargetObject ChildTargetObjectInner { get; set; }
}
Configuration and test:
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();
In the last line we have change property ChildTargetObject and it change inner property ChildTargetObjectInner. But we didnt get interception of it. Why?
If I remove the "virtual" near ChildTargetObject it will be work fine (but this workaround impossible because I use NHiber).
If I change ChildTargetObjectInner directly (ex, o.ChildTargetObjectInner = new ChildTargetObject();), I got intercept.
How can I intercept of any changes (in class and out of class)? Thank you.