Я нахожусь в середине обновления от 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);
Я по-прежнему ценю любые мысли об этом решении и о том, как другие люди обрабатывают добавление пользовательских свойств к члену и доступ к ним из кода.
Я в конечном итоге, используя новые версии MemberService и модифицировал мой класс MemberProfile некоторыми методами, чтобы получить член на основе передачи контекста (я редактировал свой вопрос, чтобы показать, что я сделал). Спасибо за указатель на новый API :) – g7876413