是否可以编写一个C#代码,它会触发AppDomain.TypeResolve事件?

时间:2009-09-03 16:23:03

标签: .net events appdomain

AppDomain.TypeResolve在我眼中是神秘的。有人可以提供触发此事件的示例代码吗?

感谢。

3 个答案:

答案 0 :(得分:4)

Type t = Type.GetType("Class1");会这样做。

来自MSDN: “当公共语言运行库无法确定可以创建所请求类型的程序集时,会发生TypeResolve事件。如果在动态程序集中定义了类型,或者在动态程序集中未定义类型,则会发生这种情况。运行时不知道该类型定义在哪个程序集中。当使用未使用程序集名称限定的类型名称调用Type .. ::。GetType时,可能会发生后一种情况。“

答案 1 :(得分:0)

MSDN非常清楚何时引发此事件:

  

当公共语言运行库无法确定可以创建所请求类型的程序集时,会发生TypeResolve事件。如果在动态程序集中定义类型,或者类型未在动态程序集中定义但运行时不知道定义了类型的程序集,则会发生这种情况。后一种情况可能在使用a调用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");

答案 2 :(得分:0)

AppDomain.TypeResolve事件会在您请求默认情况下无法解析的类型时触发。通常,这不会发生,因为您的依赖项将始终与可执行文件(默认情况下)或GAC位于同一位置。

但是,很容易强制它发生。只是做:

Type badType = Type.GetType("IDontExist");

由于该类型不存在,它将调用该事件以尝试“查找”该类型。