Ik ben een applicatie aan het bouwen waar er verschillende types dynamisch moeten kunnen geladen worden. De types die moeten geladen worden, staan gespecifieerd in een configfile, en worden geladen door een 'factory' class.
De configfile ziet er bv zo uit:
In de factory class ga ik de XML configuration file gaan lezen, en met die informatie ga ik dan de objecten gaan laden.
Dit doe ik als volgt:
Tot hiertoe geen probleem, de objecten worden goed geladen.
Echter, er treedt een probleem op als het object dat ik wil inladen een reference heeft naar een andere custom assembly die zich niet in de GAC bevind; die referenced assembly bevindt zich echter wel in dezelfde directory als de assembly die ik wil laden (in m'n voorbeeld dus f:\mydirectory).
Dit probleem treedt ook enkel op als de configuratie-file waar ik eerder over sprak niet in dezelfde directory staat als de assemblies (f:\mydirectory dus). Staat die configuratie file wel in die directory, dan heb ik het probleem niet.
Ik heb ook gezien dat de 'CurrentDirectory' de directory is waar de configuratie-file staat. Vandaar dus dat die referenced assembly wel gevonden wordt als m'n config file in diezelfde directory staat.
Nu heb ik gezien dat er een aantal events bestaan die zouden moeten getriggered worden als een assembly niet gevonden wordt bij het laden:
Assembly.ModuleResolve
AppDomain.TypeResolve
AppDomain.AssemblyResolve
Nu had ik het idee om een eventhandler te 'subscriben' aan deze events, zodat ik dan zelf naar die assembly kan gaan zoeken, maar blijkbaar worden deze events in mijn geval zelfs niet getriggered.
Heeft er hier iemand ervaring met dergelijke dingen, misschien heeft iemand een idee of een gouden tip.
De configfile ziet er bv zo uit:
code:
1
2
3
4
| <typetoload>
<assemblyname>f:\mydirectory\myassembly.dll</assemblyname>
<typename>mytype</typename>
</typetoload> |
In de factory class ga ik de XML configuration file gaan lezen, en met die informatie ga ik dan de objecten gaan laden.
Dit doe ik als volgt:
code:
1
2
3
| Assembly asm = Assembly.LoadFrom (assemblyName); // assemblyName is hier f:\mydirectory\myassembly.dll object o = asm.CreateInstance ( typeName, true, BindingFlags.Default, .... ); |
Tot hiertoe geen probleem, de objecten worden goed geladen.
Echter, er treedt een probleem op als het object dat ik wil inladen een reference heeft naar een andere custom assembly die zich niet in de GAC bevind; die referenced assembly bevindt zich echter wel in dezelfde directory als de assembly die ik wil laden (in m'n voorbeeld dus f:\mydirectory).
Dit probleem treedt ook enkel op als de configuratie-file waar ik eerder over sprak niet in dezelfde directory staat als de assemblies (f:\mydirectory dus). Staat die configuratie file wel in die directory, dan heb ik het probleem niet.
Ik heb ook gezien dat de 'CurrentDirectory' de directory is waar de configuratie-file staat. Vandaar dus dat die referenced assembly wel gevonden wordt als m'n config file in diezelfde directory staat.
Nu heb ik gezien dat er een aantal events bestaan die zouden moeten getriggered worden als een assembly niet gevonden wordt bij het laden:
Assembly.ModuleResolve
AppDomain.TypeResolve
AppDomain.AssemblyResolve
Nu had ik het idee om een eventhandler te 'subscriben' aan deze events, zodat ik dan zelf naar die assembly kan gaan zoeken, maar blijkbaar worden deze events in mijn geval zelfs niet getriggered.
Heeft er hier iemand ervaring met dergelijke dingen, misschien heeft iemand een idee of een gouden tip.
https://fgheysels.github.io/