Реализация пользовательских поставщиков достаточно прямолинейна, но требует некоторого времени, потому что вы должны реализовать множество методов и свойств. В следующих разделах вы создадите пользовательского поставщика Membership и Roles, который использует XML-файл и лежащий в основе источник данных. ХМL-файлы — не слишком хорошее решение для масштабируемых приложении, но может оказаться неплохой альтернативой, если вы разрабатываете простое приложение и хотите разместить его на сайте поставщика, не имеющего доступа к базе данных, такой как SQL Server.
Прежде чем создать пользовательского поставщика, вам следует подумать об общем дизайне всего решения. Ваша цель — сохранить лежащую в основе функциональность насколько возможно простой, чтобы можно было сосредоточиться на действительной реализации поставщиков Membership и Roles. В случае XML простейший способ загружать и сохранять данные в файлах XML— это XML-ceриализация. Это позволит вам сохранять полный граф объекта в файле одним вызовом функции и читать его также одним вызовом другой функции.
_Serializer = new XmlSerializer(typeof(List<SimpleUser>));
using {XmlTextReader reader = new XmlTextReader(fileName))
{
_Users = (List<SimpleUser>)_Serializer.Deserialize(reader);
}
Поскольку такие классы, как MembershipUser не дают доступа к некоторой информации — например, к паролю — вы не можете использовать их с XML-сериализацией непосредственно. ХМL-сериализация требует, чтобы все сохраняемые свойства и члены были общедоступными. Таким образом, вы создадите свои собственные представления пользователей и ролей в виде служебных классов для хранилища заднего плана. Эти классы никогда не будет передаваться в приложение, которое просто полагается на существующие классы Membership. (Вы включите некоторую логику отображения, которая достаточно проста, между внутренним представлением пользователя и классом MembershipUser.) На рис. 26.2 демонстрируется общий дизайн решения пользовательского поставщика.
Как уже упоминалось, классы SimpleUser и SimpleRole обеспечивают возможность XML-сериализации. Хотя это требует некоторой логики отображения для поддержки MembershipUser, это значительно облегчает всю реализацию. UserStore и RoleStore — служебные классы для инкапсуляции доступа к XML-файлу. Эти классы включают функции для загрузки и сохранения XML-файлов вместе с некоторыми базовыми служебными функциями поиска информации в хранилище.
И, наконец, модель включает классы XmlMembershipProvider И XmlRoleProvider. XmlMembershipProvider наследует базовую функциональность от MembershipProvider, в то время как XmlRoleProvider унаследован от RoleProvider. Оба базовых класса определены в пространстве имен System.Web.Security.
предыдущая следующая страница вначало главы оглавление
1027