我正在编写一个角色提供程序,为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
,以便它认为MyRoleProviderDerivedClass
与RoleProvider
基类相同?
答案 0 :(得分:0)
没有办法解决这个问题,因为你无法进入比较或进入typeof
。这是一个简单的参考比较。