我有一个应用程序,通过读取它们的DLL文件来加载插件,然后使用AppDomain.CurrentDomain.Load(bytes)
加载字节。请注意,该应用程序和插件已加载到同一AppDomain中。该插件包含几个类,这些类使用静态构造函数在服务定位器系统中注册自己。
稍后,我的主应用程序尝试使用服务定位器查找并实例化这些服务类之一,但找不到该类。手动检查后,我发现定位器中存在注册表项,因此它已被注册,但是由于某些未知原因,类型不相等。
然后,我在注册类型的地方放置一个断点,发现以下奇怪之处:typeof(IViewFor<CompactDashboardViewModel>)
怎么不等于自己?
然后,我测试了一些其他内容:
t == t
true
typeof(IViewFor<CompactDashboardViewModel>) == typeof(IViewFor<CompactDashboardViewModel>)
true
t.AssemblyQualifiedName == typeof(IViewFor<CompactDashboardViewModel>).AssemblyQualifiedName
true
实际上,除了
m_handle
和m_cache
字段外,关于这2个Type对象的所有内容似乎都是相等的。typeof(IViewFor<CompactDashboardViewModel>).TypeHandle
{System.RuntimeTypeHandle}
Value: 0x08690784
m_type: {Name = "IViewFor`1" FullName = "ReactiveUI.IViewFor`1[[PluginMTSICS.ViewModel.CompactDashboardViewModel, PluginMTSICS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
t.TypeHandle
{System.RuntimeTypeHandle}
Value: 0x0f8cf5a8
m_type: {Name = "IViewFor`1" FullName = "ReactiveUI.IViewFor`1[[PluginMTSICS.ViewModel.CompactDashboardViewModel, PluginMTSICS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
有人知道这里发生了什么吗?我正在使用.NET 4.7.1。
我正在尝试创建一个MCVE,但到目前为止没有成功。
最佳答案
也许这可行:
Type t = typeof(IViewFor<CompactDashboardViewModel>);
//this should evaluate to true:
bool result = t.Equals(typeof(IViewFor<CompactDashboardViewModel>));
Type.Equals文档:
https://msdn.microsoft.com/en-us/library/3ahwab82(v=vs.110).aspx
编辑:
阅读这篇文章Type Checking: typeof, GetType, or is?后,我希望它能起作用:
Type t = typeof(IViewFor<CompactDashboardViewModel>);
//this should evaluate to true:
bool result = t is IViewFor<CompactDashboardViewModel>;
关于c# - 为什么这些Type对象不相等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51672984/