使GetType匹配类型的基类

时间:2015-07-17 14:10:17

标签: c# asp.net-mvc-4

我正在编写一个角色提供程序,为ASP.NET MVC 4框架提供用户角色信息,我正在使用一个名为JDash的库。 JDash documentation要求我编写实现System.Web.Security.RoleProvider的提供程序,然后在JDash .config文件中设置其类型名称。所以我编写了一个我的角色提供程序的存根,并给了JDash它的类型名称,JDash正确地找到了设置,并试图实例化我的RoleProvider。然而,它仍然失败了:

  

“自定义角色提供程序必须实现System.Web.Security.RoleProvider   抽象类“

即使我完全确定我的班级正在正确实施RoleProvider

所以我看了一下JDash源代码,发现它是如何检查set role provider实现的RoleProvider

Type type = Type.GetType(config["roleProvider"]);
if (!(type == typeof (RoleProvider)))
      throw new ArgumentException("Custom role provider must implement System.Web.Security.RoleProvider abstract class");

问题是,GetType()返回我的角色提供程序的实际运行时类型...不是System.Web.Security.RoleProvider,它是来自System.Web.Security.RoleProvider派生类 ,所以当然它与typeof(RoleProvider)不匹配。我的班级RoleProvider属于不同类型;一个恰好恰好来自另一个,typeof高兴地忽略了这个事实。因此,如果我正确看到这一点,JDash就会出现一个错误,它无法为其提供一个角色提供程序,将其运行时类型作为RoleProvider之外的其他类型返回。

我将报告此错误并希望修复,但暂时,有什么方法可以解决它吗?我可以以某种方式让GetType("MyRoleProviderDerivedClass")返回RoleProvider的类型吗?或者我可以以某种方式欺骗typeof,以便它认为MyRoleProviderDerivedClassRoleProvider基类相同?

1 个答案:

答案 0 :(得分:0)

没有办法解决这个问题,因为你无法进入比较或进入typeof。这是一个简单的参考比较。