繁体   English   中英

替代角色提供程序-ASP.NET

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM