2015-01-09 9 views
0

umbra v6.0.5에서 v7.2.1로 업그레이드하는 중입니다.버전 7의 UmbracoMemberProfileProvider가 존재하지 않습니다.이 대체품은 무엇입니까?

public class MemberProfile : ProfileBase 
    { 
     #region Firstname 
     private const string FIRSTNAME = "_firstname"; 
     [SettingsAllowAnonymous(false)] 
     public string FirstName 
     { 
      get 
      { 
       return GetCustomProperty(FIRSTNAME); 
      } 
      set 
      { 
       SetCustomProperty(FIRSTNAME, value); 
      } 
     } 
     #endregion 

     #region Get and Set base properties 

     private string GetCustomProperty(string propertyName) 
     { 
      var retVal = ""; 
      var prop = base.GetPropertyValue(propertyName); 
      if (prop != null) 
      { 
       retVal = prop.ToString(); 
      } 
      return retVal; 
     } 
     private void SetCustomProperty(string propertyName, object value) 
     { 
      var prop = base[propertyName]; 
      if (prop != null) 
      { 
       base.SetPropertyValue(propertyName, value); 
      } 
     } 

     #endregion 
    } 

이것의 목적은 그래서 작업 할 수있다 :

<profile defaultProvider="UmbracoMemberProfileProvider" enabled="true" inherits="NFOPP.Website.usercontrols.Security.MemberProfile, NFOPP.Website"> 
     <providers> 
     <clear /> 
     <add name="UmbracoMemberProfileProvider" type="umbraco.providers.members.UmbracoProfileProvider, umbraco.providers" /> 
     </providers> 
     <properties> 
     <clear /> 
     <add name="_title" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" /> 
     <add name="_firstname" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" /> 
     <add name="_lastname" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" /> 
     <add name="_memberNumber" allowAnonymous="false" provider="UmbracoMemberProfileProvider" type="System.String" /> 
     </properties> 
    </profile> 

나는이 같은 클래스가 : 내 전류 (V6)의 web.config에서

나는 다음이 내 MemberProfile 객체를 찾아 FirstName과 같은 속성에 직접 액세스합니다.

"umbraco.providers.members.UmbracoProfileProvider"가 "ProfileBase"를 재정의하는 클래스를 올바르게 연결시킬 수 없다는 의미가 더 이상 존재하지 않는 것 같습니다.로드하려고 할 때 "MemberProfile"개체에 액세스하는 페이지 "No PropertyType은 제공된 별칭 _firstname을 사용하여 존재하지 않음"이라고 말합니다.

더 좋은 방법은 없으며 v7에서는 더 이상 필요하지 않은 구성 섹션이 실제로 필요합니다. 공급자?

솔루션 구현 :

#region Get and Set base properties 

     private string GetCustomProperty(string propertyName) 
     { 
      var retVal = ""; 
      if (_member.Properties.IndexOfKey(propertyName) > -1) 
      { 
       var prop = _member.Properties[propertyName]; 

       if (prop != null && prop.Value != null) 
       { 
        retVal = prop.Value.ToString(); 
       } 
      } 
      return retVal; 
     } 
     private void SetCustomProperty(string propertyName, object value) 
     { 
      if (_member.Properties.IndexOfKey(propertyName) > -1) 
      { 
       var prop = _member.Properties[propertyName]; 
       if (prop != null) 
       { 
        prop.Value = value; 
       } 
      } 
     } 

     #endregion 

:

public static MemberProfile Get(IMemberService memberService, UmbracoContext context) 
     { 
      var membershipHelper = new Umbraco.Web.Security.MembershipHelper(context); 

      var profileModel = membershipHelper.GetCurrentMemberProfileModel(); 
      if (profileModel != null) 
      { 
       return Get(profileModel.UserName, memberService); 
      } 
      else 
      { 
       return null; 
      } 
     } 

     public static MemberProfile Get(string userName, IMemberService memberService) 
     { 
      var member = memberService.GetByUsername(userName); 

      return new MemberProfile(member); 
     } 

나는 또한 이렇게 같은 가져 오기 및 설정 속성 방법 업데이트 :

내가 내 회원 프로필 클래스에 다음과 같은 방법을 추가 이것을 사용하려면 멤버 객체가 필요한 곳이면 어디에서든지 다음을 호출했습니다.

var member = MemberProfile.Get(ApplicationContext.Current.Services.MemberService, Umbraco.Web.UmbracoContext.Current); 

이 솔루션과 다른 사람들이 사용자 지정 속성을 멤버에 추가하고 코드에서 액세스하는 방법에 대해 생각해 주시면 감사하겠습니다.

답변

1

그것은 마음으로, 그러나 나는 여전히이 같은 asp.net 기반 프로필 공급자가 생각 :

<profile defaultProvider="UmbracoMemberProfileProvider" enabled="true" inherits= "Umbarco.Models.MemberProfile, Umbarco"> 

사용 고려를 나는 MemberService의 새 버전을 사용하게 한 새로운 Membership API introduced in v7.1

+0

컨텍스트 전달을 기반으로 멤버를 얻는 몇 가지 메서드로 내 MemberProfile 클래스를 수정했습니다. (내가 한 것을 보여주기 위해 내 질문을 편집했습니다.) 새 API에 대한 포인터 주셔서 감사합니다 :) – g7876413