Я пытаюсь настроить процесс разрешения сборки, поместив AppDomain
и его AssemblyResolve
в класс. Упрощенная версия моего ClassLoader
приведена ниже. Проблема, с которой я сталкиваюсь, заключается в том, что при запуске события AssemblyResolve
мне кажется, что я получаю новый экземпляр ClassLoader
, а не тот, который я создал ранее.
[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;
}
// ...
}
При выполнении этого кода FooProperty не инициализируется в обработчике событий Domain_AssemblyResolve, а экземпляр ClassLoader имеет хеш-код, отличный от «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");
У тебя что происходит? или какой-то обходной путь?
Спасибо!