我可以更改在.NET中解析和实例化类型的方式吗?

时间:2020-03-05 18:57:08  来源:igfitidea点击:

在某些语言中,我们可以覆盖" new"关键字来控制实例化类型的方式。我们不能直接在.NET中执行此操作。但是,我想知道是否有一种方法可以处理"找不到类型"异常,并在任何"新"发现这种类型的炸毁之前手动解决该类型?

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

请不要建议其他序列化方法。

解决方案

回答

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

回答

我们可以将事件处理程序添加到AppDomain.CurrentDomain.AssemblyResolve来参与该过程。

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

我们可以在MSDN上阅读有关它的更多信息。

回答

还有一个AppDomain.TypeResolve事件,我们可以重写该事件。

回答

"选择永无止境"讨论了如何以不同的方式看待问题,可能是设计而不是工具出了问题。

我认为尝试"新手"做其他事情将是错误的方法。

考虑一下为什么必须谨慎使用运算符重载,这是违反直觉的,并且在语言语义中存在隐藏的更改时也很难调试。

退后一步,在更大的范围内看一下设计,尝试找到更明智的方法来解决问题。