AppDomain.TypeResolve 在我眼里很神秘。有人可以提供触发此事件的示例代码吗?
谢谢。
Type t = Type.GetType("Class1");
会做的。
来自 MSDN: “当公共语言运行时无法确定可以创建请求类型的程序集时,会发生 TypeResolve 事件。如果该类型是在动态程序集中定义的,或者该类型未在动态程序集中定义但"
MSDN非常清楚何时引发此事件:
当公共语言运行库无法确定可以创建请求类型的程序集时,会发生 TypeResolve 事件。如果类型是在动态程序集中定义的,或者该类型未在动态程序集中定义但运行时不知道该类型是在哪个程序集中定义的,则可能会发生这种情况。当 Type.GetType 使用不使用程序集名称限定的类型名称。
此代码将触发事件:
AppDomain.CurrentDomain.TypeResolve += delegate(object sender, ResolveEventArgs e)
{
Console.WriteLine("Trying to resolve '{0}'", e.Name);
return null;
};
Type type = Type.GetType("SomeNamespace.SomeTypeWithoutAssemblyQualifier");
AppDomain.TypeResolve事件将在您请求默认情况下无法解析的类型时触发。通常,这不会发生,因为您的依赖项将始终与可执行文件(默认情况下)或 GAC 位于同一位置。
但是,很容易强迫它发生。做就是了:
Type badType = Type.GetType("IDontExist");
由于该类型不存在,它会调用该事件来尝试“查找”该类型。