2015-01-09 2 views
0

Я нахожусь в середине обновления от umbraco v6.0.5 до v7.2.1.UmbracoMemberProfileProvider в версии 7 не существует, какова замена для этого?

В моем текущем (v6) web.config У меня есть следующий:

<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> 

У меня также есть класс вроде этого:

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 
    } 

Цель этого так я могу работать с мой объект MemberProfile и получить доступ к его свойствам, таким как FirstName.

«umbraco.providers.members.UmbracoProfileProvider», похоже, не существует (если я не ошибаюсь) больше смысла, я не могу представить класс, который должным образом отменяет «ProfileBase», и когда я пытаюсь загрузить страница, которая обращается к объекту «MemberProfile», говорит, что «No PropertyType существует с предоставленным псевдонимом _firstname»

Есть ли лучший способ сделать это, а в v7 - раздел конфигурации, который действительно нужен, если нет провайдер?

Решение Реализовано:

я добавил следующие методы мой член класса профиля:

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); 
     } 

Я также обновил получить и установить методы свойств, как так:

#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 

Чтобы использовать это, я тогда вызывал следующее, где мне нужен объект-член:

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"> 

Рассмотрим с помощью нового Membership API introduced in v7.1

+0

Я в конечном итоге, используя новые версии MemberService и модифицировал мой класс MemberProfile некоторыми методами, чтобы получить член на основе передачи контекста (я редактировал свой вопрос, чтобы показать, что я сделал). Спасибо за указатель на новый API :) – g7876413

Смежные вопросы