i'm using spring.net 1.3.1 alongside mvvm foundation apply cross-cutting viewmodels. i've noticed if assign property changed handler before object converted proxy cross-cutting proxy engine not apply property changed handler proxy. know if expected behavior , if so, if there workaround?
my factory looks this
public static class aopproxyfactory { public static object getproxy(object target) { var factory = new proxyfactory(target); factory.addadvisor(new spring.aop.support.defaultpointcutadvisor( new attributematchmethodpointcut(typeof(attributestoringmethod)), new unitvalidationbeforeadvice()) ); factory.addadvice(new notifypropertychangedadvice()); factory.proxytargettype = true; return factory.getproxy(); } } the advices this
public class unitvalidationbeforeadvice : imethodbeforeadvice { public unitvalidationbeforeadvice() { } public void before(methodinfo method, object[] args, object target) { if (args.length != 1) { throw new argumentexception("the args collection not valid!"); } var canconvertto = true; if (!canconvertto) { throw new argumentexception("the '{0}' cannot converted."); } } } public class notifypropertychangedadvice : iafterreturningadvice, inotifypropertychanged { public event propertychangedeventhandler propertychanged; public void afterreturning(object returnvalue, methodinfo method, object[] args, object target) { if (method.name.startswith("set_")) { raisepropertychanged(target, method.name.substring("set_".length)); } } private void raisepropertychanged(object target, string propertyname) { if (propertychanged != null) propertychanged(target, new propertychangedeventargs(propertyname)); } } the object i'm proxying this
public class proxytypeobject : observableobject { private string whocaresitsbroke; public string whocaresitsbroke { { return whocaresitsbroke; } set { whocaresitsbroke = value; raisepropertychanged("whocaresitsbroke"); } } } and calling code
var pto = new proxytypeobject(); pto.whocaresitsbroke = "boohoo"; pto.propertychanged += (object sender, system.componentmodel.propertychangedeventargs e) => { return; }; var proxy = aopproxyfactory.getproxy(pto); (proxy proxytypeobject).whocaresitsbroke = "boohoo2"; you notice when set "whocaresitsbroke" property property changed handler hooked never hit. (i tried using notifypropertychangedadvice provided in spring.net forums not appear work.)
it seems spring examples spring.aopquickstart\src\spring.aopquickstart.step6 samething trying (intercepting [autogenerated] setter of property). might want have @ the source of example.
Comments
Post a Comment