castle windsor - What is the proper way to call proxied method inside concrete class? -
this question has answer here:
for instance have irepository
, implemented repository
interceptors.
inside interceptor see irepositoryproxy
basetype object
, not repository
.
for example: resolve irepository
, call getfunctionalitypurposes
, want call getallfunctionalitypurposes
cached/proxied.
this not work since methods invoked in repository
not irepositoryproxy
.
irepository
functionalitypurpose[] getfunctionalitypurposes(); functionalitypurpose[] getallfunctionalitypurposes()
repository
[cached("tender")] public virtual functionalitypurpose[] getfunctionalitypurposes() { var model = getallfunctionalitypurposes() .where(r => !r.ishidden && !r.groupid.hasvalue); return model; } [cached("tender", "functionalitypurpose")] public virtual functionalitypurpose[] getallfunctionalitypurposes() { var model = unitofwork.getset<model>().select(f => f.functionalitypurpose) .distinct().orderby(r => r.id).toarray(); return model; }
i've looked https://github.com/castleproject/windsor/blob/master/src/castle.windsor/windsor/proxy/defaultproxyfactory.cs#l110 , i've done registration easy way: container.register(classes.fromthisassembly().basedon(typeof(irepositorybase<,>)) .withserviceallinterfaces().withserviceself().lifestyletransient());
note .withserviceself() call, switches class-based proxying
Comments
Post a Comment