Есть ли способ использовать постоянное выражение в качестве аргумента атрибута? - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу использовать поле «статическое чтение только» из класса «Настройки», здесь весь мой код, например сообщения об ошибках и константы, содержится в атрибуте [StringLength] для ViewModel. Однако StringLength не принимает аргументы атрибута, которые не являются константным выражением, выражением typeof или выражениями массива. Однако поле, которое я использую, не может быть изменено на постоянное выражение, потому что оно использует другие постоянные поля и, таким образом, выдает ошибку.

Я знаю, что есть способ обойти это, используя строку и константное выражение

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

Я пытался использовать свойство get для этого поля, которое является константой, но, похоже, тоже не работает. Я погуглил и посмотрел здесь на stackoverflow, но не могу найти никого с такой же проблемой.

Я также попытался использовать string.Format () в качестве аргумента, хотя это НЕ решение, которое я хочу, потому что тогда мне все еще нужно изменить это сообщение в нескольких местах.

Произошла ошибка для Settings.LastNameLength в строке StringLength.

    public class DeelnemerViewModels
    {
...
        [Display (Name = "Lastname", Prompt = "Doe")]
        [Required (ErrorMessage = Settings.fieldNeeded)]
        [StringLength (Settings.maxAmountOfCharactersLastName, MinimumLength = Settings.minAmountOfCharactersLastname, ErrorMessage = Settings.LastNameLength)]
        public string Lastname { get; set; }
...

    }
    public static class Settings
    {
...
        public const int minAmountOfCharactersLastname = 2;
        public const int maxAmountOfCharactersLastName = 50;

        public static readonly string LastNameLength =
            "The lastname does not fit the requirements. The lastname must atleast be "
            + minAmountOfCharactersLastname + " characters long and at max "
            + maxAmountOfCharactersLastName + " characters long.";
...
    }
...