J'essaie de personnaliser le processus de résolution d'assemblage en enveloppant le AppDomain
et son événement AssemblyResolve
dans une classe. La version simplifiée de mon ClassLoader
est ci-dessous. Le problème que j'ai est que lorsque l'événement AssemblyResolve
est déclenché, il semble que je reçois une nouvelle instance de ClassLoader
, pas celle que j'ai créée précédemment.Problèmes avec l'événement AssemblyResolve sur AppDomain créé
[Serializable]
public class ClassLoader // : IDisposable
{
public AppDomain Domain { get; private set; }
public string FooProperty { get; set; }
public ClassLoader(string domain) {
Domain = AppDomain.CreateDomain(domain);
Domain.AssemblyResolve += Domain_AssemblyResolve;
}
private Assembly Domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Console.WriteLine(
"ClassLoader HashCode: {0} FooProperty: {1}\n\n",
GetHashCode(),
FooProperty);
// ...
return null;
}
// ...
}
Lors de l'exécution de ce code, FooProperty n'est pas initialisé dans le gestionnaire d'événements Domain_AssemblyResolve et l'instance de ClassLoader a un code de hachage différent de "c".
var c = new ClassLoader("demo");
c.FooProperty = "Foo";
Console.WriteLine(
"c Hash Code: {0} FooProperty: {1}",
c.GetHashCode(),
c.FooProperty);
c.Domain.CreateInstanceAndUnwrap("Not important", "Not important");
Que faites-vous? ou une solution de contournement?
Merci!