2009-10-15 8 views
0

편집 : 우리는 새로운 메서드에서 동일한 메서드를 계속 사용하려는 RoleProvider를 재정의합니다. Roles.GetRolesForUser (int)와 같은.재정의 역할 공급자 - ASP.NET

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> 

이 왜 어떤 제안?

답변

2

. 이것은 당신이 표준 개체를 확장했지만 당신이 게시물에 지적했다대로, 슈퍼 클래스 (마스터 페이지 등)

string[] myRoles3 = ((PortalRoleProvider) (Roles.Provider)).GetRolesForUser(2);

은 위의로 액세스하는 모든 시간을 작품에 적용 . 내가 이런 짓을 한

PortableRoleProvider TempPointer=(PortableRoleProvider)Roles.Provider;

string[] myRoles3=TempPointer.GetRolesForUser(2);

+0

좋습니다. 이해가 되시죠. 확장 할 수 있습니까? GetRolesForUser (int a)를 호출하려면 어떻게해야합니까? – LiamB

+0

"문자열 [] myRoles = 새 PortalRoleProvider(). GetRolesForUser (2);" 이것은 우리가 현재 RoleProvider로만 확장하기를 원하기 때문에 약간 뒤로 보입니다. – LiamB

+1

더 나은 아직 인터페이스를 사용하여 개체를 분리합니다. –

1

역할 공급자의 유형을 지정하는 web.config에서 유형을 찾을 수있는 어셈블리의 이름을 추가해야 할 수 있습니다. 이런 식으로 뭔가 : 당신은 여분의 기능을 볼 수있는 실제 객체 유형 (즉 PortalRoleProvider)로 RoleProvider 캐스팅해야

<add name="PortalRoleProvider" type="PortalMVC.Providers.PortalRoleProvider, MyAssemblyName" /> 
+0

을하지만,이 었소가 도왔 : 당신이 코드 섹션이 많이 사용해야하는 경우, 당신은 거기에서 메서드에 액세스 할 적절한 유형의 포인터를 만들 수 있습니다 위의 문제. 그래도 고마워. – LiamB

관련 문제