Получить всех пользователей в Umbraco v7.1.4

Я пытаюсь получить информацию обо всех пользователях на моем сайте Umbraco. Цель этого состоит в том, чтобы создатель контента мог указать имена пользователей как «Владельцы» контента, с которыми могут связаться анонимные пользователи веб-сайта (простая ссылка «mailto» с использованием сохраненного адреса электронной почты после сопоставления имени пользователя с именем пользователя, заданным контентом создатель).

Мне удалось получить данные пользователя, используя:

var users = umbraco.BusinessLogic.User.getAll();

но в Visual Studio появляется следующее предупреждение:

'Umbraco.BusinessLogic.User' is obsolete: '"Use the UserService instead"'

Я создал экземпляр UserService, но для функции GetAll() требуется ряд параметров, которых нет у функции BusinessLogic.

Как заставить всех пользователей использовать UserService?

Есть ли лучший способ для меня достичь того, чего я пытаюсь достичь?

Для пояснения, это следующий код, который я использовал с устаревшей BusinessLogic:

var users = umbraco.BusinessLogic.User.getAll();
var owners = Umbraco.Field("owner").ToString().Split(',');

foreach (var user in users)
{
    foreach (var owner in owners)
    {
        if (String.Equals(user.LoginName, owner))
        {
            <div class="owner">
                <a href="mailto:@user.Email">@owner</a>
            </div>
        }    
    }

}

person LoveFortyDown    schedule 10.07.2014    source источник


Ответы (1)


Пользовательская служба доступна в коллекции Services. Если вы используете представления MVC или партиалы, вы можете просто найти их в Services. В противном случае вы можете найти его в ApplicationContext.Current.Services

Другой способ найти его обратно:

using Umbraco.Core.Services;
using Umbraco.Core.Persistence;
var userService = new UserService(new RepositoryFactory());

Текущего пользователя можно найти в UmbracoContext.Current.Security.CurrentUser

Обновить

Чтобы сделать GetAll, вы можете сделать это в представлении:

@{
var userService = ApplicationContext.Current.Services.UserService;
int totalRecords;
}

@foreach (var user in userService.GetAll(0, 100, out totalRecords))
{
    <h1>@(user.Name)</h1>
    @user.Username
}

Количество найденных пользователей: @totalRecords.ToString()

Но... помните, что Службы попадут в базу данных, если вы хотите создать хорошо работающий веб-сайт с большим количеством пользователей, рассмотрите другое решение.

person dampee    schedule 12.07.2014
comment
Спасибо за ваш ответ. Мне удалось найти UserService, но я пытаюсь использовать функцию GetAll(). Мне нужны не текущие пользователи, а список всех пользователей. - person LoveFortyDown; 14.07.2014
comment
Затем выполните userService.GetAll(0,100,out totalRecords), я соответствующим образом отредактирую свой пост. - person dampee; 14.07.2014