Вопрос, который у меня был у меня, был: «Если я вызову библиотечный код N методов глубоко и хочу пространство имен проекта - например, приложение MVC, которое действительно работает, - как это получить?»
Немного взломанный, но вы можете просто захватить стек и трафик:
public static string GetRootNamespace()
{
StackTrace stackTrace = new StackTrace();
StackFrame[] stackFrames = stackTrace.GetFrames();
string ns = null;
foreach(var frame in stackFrames)
{
string _ns = frame.GetMethod().DeclaringType.Namespace;
int indexPeriod = _ns.IndexOf('.');
string rootNs = _ns;
if (indexPeriod > 0)
rootNs = _ns.Substring(0, indexPeriod);
if (rootNs == "System")
break;
ns = _ns;
}
return ns;
}
Все это делается, это получение stacktrace, запуск методов из последнего вызова root и фильтрация для System , Когда он найдет системный вызов, он знает, что он зашел слишком далеко и возвращает вам пространство имен непосредственно над ним. Если вы используете модульный тест, приложение MVC или службу, системный контейнер будет сидеть на 1 уровень глубже корневого пространства имен вашего проекта, поэтому voila.
В некоторых сценариях, где Системный код является промежуточным (например, System.Task) по трассировке, который возвращает неверный ответ. Моя цель состояла в том, чтобы взять, например, некоторый код запуска и позволить ему легко найти класс или контроллер или что-то еще в корневом пространстве имен, даже если код, выполняющий работу, выйдет в библиотеке. Это выполняет эту задачу.
Я уверен, что это может быть улучшено. Я уверен, что этот хакерский способ сделать что-то может быть улучшен во многих отношениях, и улучшения приветствуются.
Даже если ваши значения - целые числа, если вы установите целое число в строку, это сработает.
dijit.byId( 'my_select' ).attr( 'value', String( 5 ) );
Репост моего комментария: Здесь есть тестовая страница: архив додзё , с которой вы можете повозиться. Используя fire-bug, я успешно использовал dijit.byId ('s9'). Attr ('value', 'CO') на этой странице. Это установит на этой странице выбор "на основе магазина".
Но, как вы сказали, я установил его с помощью строки, а вы использовали целые числа, поэтому я не заметил ошибки. Хороший улов.
Оказалось, что это ошибка - если значения опций не строки, это не работает (у меня были целые числа).