我試圖通過將AppDomain
及其AssemblyResolve
事件包裝到類中來自定義程序集解析過程。下面是我的ClassLoader
的簡化版本。我遇到的問題是當事件AssemblyResolve
被解僱時,似乎我得到一個新的ClassLoader
實例,而不是我之前創建的實例。創建的AppDomain上的AssemblyResolve事件的問題
[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事件處理程序初始化,類加載器實例具有從「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");
你是怎麼回事?或一些解決方法?
謝謝!