c# - Pass parameter to envers from castle.windsor -
i'm trying extend envers revinfo class , add properties audit. have web api project, xx.infrastructure.dependency, xx.datalayer.nhibernate libraries , on. i'm using owin auth.
i' m registering , installing container things in xx.infrastructure.dependency library , call installer static method on web api project.
public static webapicontrolleractivator installer() { createcontainer(); return new webapicontrolleractivator(_container); } private static void createcontainer() { _container = new windsorcontainer(); _container.kernel.componentregistered += kernel_componentregistered; dictionary<string, object> parameters = new dictionary<string, object>(); parameters.add("userid", "10421"); _container.install(new serviceinstaller()); _container.install(new repositoryinstaller()); _container.install(new nhibernateinstaller(parameters)); _container.install(new controllerinstaller()); _container.install(new loggerinstaller()); _container.register(component.for<unitofworkinterceptor>().lifestyle.perwebrequest.lifestyleperwebrequest()); } nhibernate installers register sessionfactory...
container.register( component.for<isessionfactory>().usingfactorymethod((k, m, c) => nhibernatesessionfactory.createsessionfactory(_factoryparameters)).lifestyle.singleton, component.for<isession>().usingfactory<isessionfactory, isession>(factory => factory.opensession()).lifestyleperthread() ); and createsessionfactory method below..
var enversconf = new enversnhibernate.configuration.fluent.fluentconfiguration(); list<type> domainentities = appdomain.currentdomain.getassemblies(). where(assembly => assembly.fullname.startswith("xxxx")). firstordefault().gettypes() .where(t => (typeof(entity<int>).isassignablefrom(t) || typeof(entity<guid>).isassignablefrom(t) || typeof(entity<ulong>).isassignablefrom(t) || typeof(entity<long>).isassignablefrom(t)) && !t.isgenerictype) .tolist(); foreach (type type in domainentities) enversconf.audit(type); corenhibernate.cfg.configuration cfg = new corenhibernate.cfg.configuration(); cfg = config.buildconfiguration(); cfg.buildmappings(); cfg.setinterceptor(new trackinginterceptor(factoryparameters)); //envers revtype values //0(add), 1(mod) , 2(del) configurationkey.audittablesuffix.setuservalue(cfg, "_log"); enversconf.setrevisionentity<customrevinfo>(e => e.id, e => e.revisiondate, new customrevinfolistener(factoryparameters)); cfg.integratewithenvers(enversconf); config.exposeconfiguration(exp => new schemaupdate(cfg).execute(false, true)); return config.buildsessionfactory(); customrevinfo listener below...
public class customrevinfolistener : irevisionlistener { private ulong _userid = ulong.minvalue; public customrevinfolistener(dictionary<string, object> additionalparameters) : base() { _userid = ulong.parse(additionalparameters["userid"].tostring()); } public void newrevision(object revisionentity) { ((customrevinfo)revisionentity).userid = _userid; } } now i'm trying pass parameters customrevinfolistener add other custom audit properties can't pass constructor parameter add run time way or logic wrong?
Comments
Post a Comment