public SimpleUser GetUserByKey(Guid key)
{
  return _Users.Find(delegate(SimpleUser user)
  {
    return (user.UserKey.CompareTo(key) == 0);
  });
}

Свойство Users — простое свойство, которое позволяет действительному поставщику (XmlMembershipProvider) иметь доступ к пользователям хранилища. После того как реализация поставщика изменяет что-то внутри хранилища (например, изменит свойства пользователя), она вызывает общедоступный метод Save(), который внутри вызывает SaveStore() для сериализации информации обратно в файл, указанный в приватной переменной _FileName данного экземпляра. Остальные методы предназначены для поиска пользователей на базе различных критериев. Для этой цели обобщенный List<> включает метод Find. Метод Find принимает ссылку на другой метод, который вызывается для сравнения каждого элемента в процессе итерации по списку. Если функция сравнения возвращает для элемента true, такой элемент включается в результаты.

public SimpleUser GetUserByKey(Guid key)
{
  return _Users.Find(delegate(SimpleUser user)
  {
    return (user.UserKey.CompareTo(key) == 0);
  });
}

В этом коде передается делегат (который представляет собой ссылку на функцию), который сравнивает внутренний ключ SimpleUser с переданным ему ключом. Если сравнение дает true, текущий пользователь, переданный как параметр из Listo, возвращается в результате; в противном случае продолжается итерация по элементам Listo. Встроенная реализация метода, без явного создания метода с отдельным прототипом, называется анонимным методом, и является специальным средством С#, для экономии кода в коротких параметрах-алгоритмах.

UserStore включает реализацию для сохранения только информации пользователя. Роли не включаются. Для этой цели вы должны реализовать класс RoleStore (подобный классу UserStore), как показано ниже:

public class RoleStore
{
  XmlSerializer _Serializer;
  private string _FileName;
  List<SimpleRole> _Roles;

  #region "Singleton Implementation"

  private static Dictionary<string, RoleStore> _RegisteredStores;

  public static RoleStore GetStore(string fileName)
  {
    // Создать зарегистрированные хранилища
    if (_RegisteredStores == null)
      _RegisteredStores = new Dictionary<string, RoleStore> ();

    // Вернуть соответствующее хранилище
    if (!_RegisteredStores.ContainsKey(fileName))
    {

предыдущая    следующая страница    вначало главы    оглавление

1032

Hosted by uCoz