我正在尝试通过将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");
你知道发生了什么吗?或一些解决方法?
谢谢!