2008-09-16 19 views
0

在某些语言中,您可以覆盖“new”关键字来控制类型的实例化方式。你不能直接在.NET中执行此操作。但是,我想知道是否有办法处理“找不到类型”异常,并在“新”编辑类型爆炸之前手动解析类型?我可以改变.NET中的类型是如何解析和实例化的吗?

我正在使用一个序列化程序,它读取基于xml的文件并实例化其中描述的类型。我对序列化程序没有任何控制权,但我希望与该进程进行交互,希望无需编写自己的appdomain主机。

请不要建议替代序列化方法。

回答

5

您可以将事件处理程序附加到AppDomain.CurrentDomain.AssemblyResolve以参与该过程。

你的EventHandler应该返回负责在ResolveEventArgs中传递的类型的程序集。

您可以在MSDN

+0

注意:这在Mono上存在问题。 – leppie 2008-10-12 07:17:36

-1

你应该看看Reflection和Activator类。他们将允许您从字符串创建对象。当然,该对象必须位于您有权访问的其中一个程序集中。

1

select isn't broken讨论了如何以不同的方式来看待它 - 错误可能在于您的设计而非您的工具。

我认为试图让“新”做别的事情会是错误的做法。

想一想为什么操作符重载必须谨慎使用 - 当语言语义存在隐藏的变化时,它是违反直觉的并且很难调试。

退一步,在更大的背景下查看设计,尝试找到更合理的方法来解决问题。

+0

我认为它更优雅,以帮助过程比去装载每一个friggen大会,我盲目地发现,希望我得到我需要的类型之前反序列化爆炸。 – Will 2008-09-17 12:48:09

相关问题