Как вы используете Castle Validator с дозвуковыми классами? - PullRequest
2 голосов
/ 09 февраля 2009

Castle Validator использует атрибуты для определения правил проверки. Как вы можете связать их с сгенерированными классами Subsonic (или любыми классами, для которых вы не можете определить атрибуты)? Есть ли способ программно задать правила проверки без использования метода атрибута?

Ответы [ 2 ]

2 голосов
/ 02 мая 2009

Я думаю, что лучший способ сделать это - использовать MetadataType. Это DataAnnotations, что позволяет вашему классу иметь пару или что-то в этом роде. Я не знаю, как это объяснить лучше, так что давайте для образцов:

Сначала вам нужно добавить эту директиву в ваш код:

using System.ComponentModel.DataAnnotations;

Им необходимо создать частичный класс сгенерированного вами класса с атрибутом, указывающим, что этот класс имеет MetadataType:


[MetadataType(typeof(UserMetadata))] 
public partial class User
{
}

Затем вы создаете класс метаданных с проверкой вашего замка:


public class UserMetadata
{
    [ValidateNonEmpty]
    [ValidateLength(6, 24)]
    public string Username { get; set; }

    [ValidateNonEmpty]
    [ValidateLength(6, 100)]
    [ValidateEmail]
    public string Email { get; set; }

    [ValidateNonEmpty]
    [ValidateLength(6, 24)]
    public string Password { get; set; }
}

Надеюсь, это поможет

0 голосов
/ 31 марта 2009

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

Посмотрите следующую ссылку, чтобы узнать, как сделать это сообщение в блоге: Улучшения Castle Validator

Если вы посмотрите на исходный код замка, вот несколько хороших отправных точек:

Надеюсь, это поможет.

...