castle windsor and generic types when loading from assembly -
im trying load types specific folder base interface generic: ianalysis
the following syntax works non generic types. :
container.register(classes.fromassemblyindirectory(new assemblyfilter(folder)).basedon<ianalysis>()); how can make work generic type? need .basedon<ianalysis<t>>
thanks
amit
you can :
public class mymoduleinstaller : iwindsorinstaller { public static bool iscontructable(this type t) { return !t.isabstract && !t.containsgenericparameters; } void iwindsorinstaller.install(iwindsorcontainer container) { ienumerable<iregistration> myregistrations = getregistrations(); if (myregistrations != null) { container.register(myregistrations .toarray()); } } protected virtual ienumerable<iregistration> getregistrations() { return new iregistration[] { classes.fromassembly(getassemblynamed("thenameofmyassembly")) .basedon<imyinterfaceormygenericbase>() .if(x => component.isinnamespace("mynamespace", true)(x) && x.iscontructable()) .withservices(new[] {typeof (imyinterfaceormygenericbase) })) }; } // can remove method. added convenience protected virtual assembly getassemblynamed(string assemblyname) { try { if(assembly.getexecutingassembly().fullname.split(',')[0] == assemblyname) { return assembly.getexecutingassembly(); } assembly fromdynamicmoduleloader = mymoduleloader.myassemblies.firstordefault(x => x.getname().name == assemblyname); if(fromdynamicmoduleloader != null) { return fromdynamicmoduleloader; } if(_loadedinappdomain == null) { _loadedinappdomain = system.appdomain.currentdomain.getassemblies() .where(x => x.fullname.contains(assemblyname)) .toarray(); } var fromappdomain = _loadedinappdomain.firstordefault(x => x.fullname.split(',')[0] == assemblyname); if(fromappdomain != null) { return fromappdomain; } return reflectionutil.getassemblynamed(assemblyname); } catch(filenotfoundexception) { throw; } } }
Comments
Post a Comment