在某些语言中,您可以覆盖“new”关键字来控制类型的实例化方式。您不能直接在 .NET 中执行此操作。但是,我想知道是否有一种方法可以处理“找不到类型”异常并在“新建”该类型的人爆炸之前手动解析类型?
我正在使用一个序列化程序,它读取基于 xml 的文件并实例化其中描述的类型。我对序列化程序没有任何控制权,但我想与该过程进行交互,希望无需编写我自己的 appdomain 主机。
请不要建议替代序列化方法。
在某些语言中,您可以覆盖“new”关键字来控制类型的实例化方式。您不能直接在 .NET 中执行此操作。但是,我想知道是否有一种方法可以处理“找不到类型”异常并在“新建”该类型的人爆炸之前手动解析类型?
我正在使用一个序列化程序,它读取基于 xml 的文件并实例化其中描述的类型。我对序列化程序没有任何控制权,但我想与该过程进行交互,希望无需编写我自己的 appdomain 主机。
请不要建议替代序列化方法。
您可以将事件处理程序附加到 AppDomain.CurrentDomain.AssemblyResolve 以参与该过程。
您的 EventHandler 应返回负责在 ResolveEventArgs 中传递的类型的程序集。
您可以在MSDN上阅读有关它的更多信息
您还可以覆盖AppDomain.TypeResolve事件。
select is not broken讨论了如何以不同的方式看待它 - 错误可能出在您的设计中,而不是您的工具上。
我认为试图让“新”去做其他事情是错误的做法。
想想为什么必须谨慎使用运算符重载 - 当语言语义中有隐藏的变化时,它是违反直觉的并且难以调试。
退后一步,在更大的背景下看待设计,尝试找到更明智的方法来解决问题。
您应该查看 Reflection 和 Activator 类。它们将允许您从字符串创建对象。当然,该对象必须位于您有权访问的程序集中之一。