Тип безопасности в строковых аргументов
Мой конкретный вопрос о ASP.NET MVC но я уверен, что ответы могут быть применены снаружи ASP.NET.
Как вы справляетесь с функциями, которые принимают строковые аргументы, но по-прежнему требуют безопасности типов?
В ASP.NET, расширение метода Html.ActionLink имеет два аргумента типа string: string linkText, string actionName
. Первый аргумент-это текст, который можно загрузить из ресурса, а второй аргумент-это имя метода, существующего в коде.
Одним из вариантов было бы создать класса с постоянным строк, поэтому вместо того, чтобы писать
Html.ActionLink("Blah blah", "MyAction");
Можно было бы написать:
Html.ActionLine("Blah blah", StrongType.MyAction);
Где MyAction
- строка const в классе, называемом StrongType
. Однако это становится проблемой, когда увеличивается число методов и других объектов, которые могут быть переданы в качестве аргументов.
Второй вариант-каким-то образом загрузить имя функции с помощью отражения, но это кажется слишком дорогим.
Есть ли лучший способ сделать это? Как вы убедитесь, что у вас нет опечатки в строковых аргументах вроде тех, что упоминались ранее?2 ответа:
Вы можете использовать метод расширения ActionLink, который позволяет избежать использования этих волшебных строк.
<%= Html.ActionLink<BlahController>(c => c.MyAction(), "Blah blah");
Вам нужно будет сослаться на
Microsoft.Web.Mvc
, который является частью ASP.NET фьючерсы на MVC 3 и доступны по адресу http://aspnet.codeplex.com/releases/view/58781 .
Я думаю, что ответ Лестера подходит для этого конкретного случая. Но в более общей ситуации вам действительно нужно определить константы и использовать их. Да, это боль, но вы можете установить Много констант за то время, которое вы сэкономите, не выслеживая ошибку, вызванную аргументом "желтый", когда вы имели в виду "желтый".
Теперь, если вы проектируете вызываемый метод, не делайте его строковым аргументом, когда у вас действительно есть набор постоянных значений, он будет принимать. Сделайте это перечислением.