Нет констант, сгенерированных T4MVC?

Почему в сгенерированном коде T4MVC нет строк-констант? Я предполагаю, что это будет копирование постоянных значений во время компиляции...

Но добавление констант в сгенерированный код позволит использовать сгенерированные T4MVC вещи в атрибутах.

Я думаю о чем-то вроде этого:

вставить @строку 400:

        public const String ControllerNameCONST = @"<#=controller.ClassName #>";

вставьте @строку 445:

        [<#= GeneratedCode #>, DebuggerNonUserCode]
        public static class ActionNamesCONST {
<#foreach (var method in controller.ActionMethodsWithUniqueNames) { #>
<#  if (UseLowercaseRoutes) { #>
            public const string <#=method.ActionName #> =     (<#=method.ActionNameValueExpression #>).ToLowerInvariant();
<#  } else { #>
            public const string <#=method.ActionName #> =     <#=method.ActionNameValueExpression #>;
<#  }
} #>
        }

Так что кто-то может использовать это так:

[SomeAttribute(HomeController.ControllerNameCONST)]
//instead of 
[SomeAttribute("Home")]
//or
[SomeAttribute(HomeController.ActionNamesCONST.SomeAction)]
//instead of 
[SomeAttribute("SomeAction")]

Изменить: использовал его как атрибут автозаполнения в модели, поэтому в модели можно указать «целевой» контроллер и действие. Хотя можно было бы переработать атрибут автозаполнения, чтобы он принимал ActionResult в качестве параметра вместо имен контроллера + действия...


person Akos Lukacs    schedule 24.06.2011    source источник


Ответы (1)


Обновление (7.12.2011): эта проблема исправлена ​​(в версии 2.6.65). См. http://mvccontrib.codeplex.com/workitem/7177.


T4MVC генерирует много констант. например

Для имени контроллера: MVC.Home.Name

Для названий действий: MVC.Home.ActionNames.About

Для имен представлений: MVC.Home.Views.About

person David Ebbo    schedule 24.06.2011
comment
Да, я знаю, но это константы только для чтения, а не C# const. Поэтому их нельзя использовать в атрибуте, потому что вы получаете ошибку времени компиляции: аргумент атрибута должен быть постоянным выражением, выражением typeof или выражением создания массива типа параметра атрибута. - person Akos Lukacs; 24.06.2011
comment
Ах я вижу. Правильно, сегодня этого не делают. Сложность заключается в том, что к нему нельзя было получить доступ как к MVC.*, как и ко всему остальному, что генерирует T4MVC. - person David Ebbo; 25.06.2011
comment
@DavidEbbo, было бы чрезвычайно полезно для людей, занимающихся серверной частью управления историей, чтобы MVC.Controller.Name был константой C #. Таким образом, их можно было бы использовать внутри операторов switch в логике перенаправления. - person rstackhouse; 12.07.2013