[英]Override Role Provider - ASP.NET
编辑:通过重写RoleProvider,我们希望仍然使用与我们的新方法相同的方法。 如Roles.GetRolesForUser(int)。
string[] myRoles3 = ((PortalRoleProvider) (Roles.Provider)).GetRolesForUser(2);
上面的代码似乎有点多余?
我有一个重写RoleProvider的某些成员并添加新方法的类。 例如。
public string[] GetRolesForUser(int UserId)
{
IEnumerable<Role> RoleList = _Repo.GetRolesForUser(UserId);
string[] RetVal = new string[] {};
foreach (var curRole in RoleList)
{
RetVal[RetVal.GetUpperBound(0)] = curRole.RoleName;
}
return RetVal;
}
现在,当我处于代码逻辑中时,我想编写Roles.GetRolesForUser(2),但是当我键入此代码时,似乎确实看到了我添加的额外方法。 这是类声明和webconfig。
namespace PortalMVC.Providers
{
public class PortalRoleProvider : RoleProvider
{
Web.config
<roleManager enabled="true" defaultProvider="PortalRoleProvider">
<providers>
<clear/>
<add name="PortalRoleProvider" type="PortalMVC.Providers.PortalRoleProvider"/>
</providers>
</roleManager>
有什么建议为什么呢?
您必须将RoleProvider强制转换为实际的对象类型(即PortalRoleProvider)才能看到其他功能。 这适用于您扩展了标准对象但以其超类(母版页等)对其进行访问的任何时间。
string[] myRoles3 = ((PortalRoleProvider) (Roles.Provider)).GetRolesForUser(2);
正如您在帖子中所指出的那样,以上内容有效。 如果您需要在代码的一部分中经常使用它,则可以创建具有正确类型的指针,然后从那里访问方法:
PortableRoleProvider TempPointer=(PortableRoleProvider)Roles.Provider;
string[] myRoles3=TempPointer.GetRolesForUser(2);
在web.config中,在其中指定角色提供程序的类型,您可能需要添加可在其中找到该类型的程序集的名称。 像这样:
<add name="PortalRoleProvider" type="PortalMVC.Providers.PortalRoleProvider, MyAssemblyName" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.