Как мне создать атрибут предпочтения пользователя? - PullRequest
0 голосов
/ 03 июня 2009

В моем текущем проекте asp.net mvc пользователь должен иметь возможность войти в систему. При входе в систему можно дополнительно установить набор предпочтений. Некоторые из этих настроек являются общими (например, предпочтительный язык сайта и т. Д.), Но некоторые относятся только к этому проекту (предопределенная фильтрация запросов и т. Д.).

Поскольку эти предпочтения присутствуют во многих местах моего сайта, я бы определил это как перекрестную озабоченность. Желательно, чтобы атрибут обрабатывал это, а не каждое отдельное действие.

Как я могу создать такой атрибут, который является достаточно общим для повторного использования в будущих проектах, но в то же время знает достаточно о текущем проекте, чтобы использовать все специфические настройки проекта?

- EDIT -
Получение и установка настроек не является проблемой. Я подключил класс UserSettings к провайдеру профиля asp.net. Моя проблема в том, как вытащить это перекрестное беспокойство из моих контроллеров в атрибут.

Ответы [ 2 ]

0 голосов
/ 03 июня 2009

Для пользовательских настроек вы должны использовать платформу ASP.NET Profile Provider. Некоторые ресурсы:

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

0 голосов
/ 03 июня 2009

независимо, если вы сохраняете эти предпочтения в текстовом файле, XML или базе данных, было бы проще создать класс (например, Utility.UserPreferences), который будет загружать эти предпочтения от пользователя и сохранять их в переменной Session. , затем с помощью enum вызовите их, чтобы получить / обновить

namespace Utility
{
    public class UserPreferences
    {
        public UserPreferences(int userID)
        {
            // Load Preferences from text file, xml file or DB
            string loadedPreferences = "us|20|yes|no";

            HttpContext.Current.Session["userPreferences"] = loadedPreferences;
        }

        public void Savepreferences(string[] pref, int userID)
        { 
            // Save preferences for that user
        }

        public static string GetPreferences(PreferencesType type)
        {
            string[] pref = HttpContext.Current.Session["userPreferences"].ToString().Split('|');

            switch (type)
            {
                case PreferencesType.Language: return pref[0];
                case PreferencesType.ShowHowManyResults: return pref[1];
                case PreferencesType.ShowNavigation: return pref[2];
                case PreferencesType.GetEmailAlerts: return pref[3];
            }
        }

        public enum PreferencesType
        {
            Language, ShowHowManyResults, ShowNavigation, GetEmailAlerts
        }
    }
}

тогда ...

// Login sucessfully...
Utility.UserPreferences pref = new Utility.UserPreferences(CurrentUser.ID);


// to retrieve a preference
string language = Utility.UserPreferences.GetPreferences(
                        Utility.UserPreferences.PreferencesType.Language,
                        CurrentUser.ID);

это просто идея ... способ, которым я бы это сделал ... он прост и имеет широкий (ые) проект (ы), потому что вам просто нужно изменить класс, чтобы он содержал больше настроек ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...