Значение Получения C# детских колясок с помощью отражения

Любая конфигурация, которая могла бы отличаться через среды, должна сохраненный в уровень машины, не прикладной уровень . (Больше информации на уровнях конфигурации.)

Это виды элементов конфигурации, которые я обычно храню на уровне машины:

, Когда каждая среда (разработчик, интеграция, тест, этап, живой), имеет свои собственные уникальные настройки в каталог c:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG, тогда, можно продвинуть Ваш код приложения между средами без любых модификаций постсборки.

И очевидно, содержание каталога CONFIG машины уровня управляется версией в различном репозитории или различной структуре папок из Вашего приложения. Можно сделать .config файлы большим количеством управления исходным кодом дружественный посредством интеллектуального использования configSource.

я делал это в течение 7 лет на более чем 200 ASP.NET приложениях в 25 + различные компании. (Не пытающийся похвастать, просто хотите сообщить, что я никогда не видел ситуации, где этот подход не делает работа.)

19
задан NealWalters 25 January 2018 в 21:56
поделиться

6 ответов

Вы можете обойти эту проблему, создав анонимный тип внутри вашего метода и воспользовавшись преимуществами инициализаторов проекции. Затем вы можете опросить свойства анонимного типа с помощью отражения. Например:

static void ManyParms(
    string a, string b, string c, int d, short e, bool f, string g)
{
    var hack = new { a, b, c, d, e, f, g };

    foreach (PropertyInfo pi in hack.GetType().GetProperties())
    {
        Console.WriteLine("{0}: {1}", pi.Name, pi.GetValue(hack, null));
    }
}
36
ответ дан 30 November 2019 в 02:00
поделиться

Вы не можете, по сути, - по крайней мере, без подключения к API отладчика / профилирования .

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

22
ответ дан 30 November 2019 в 02:00
поделиться

Вы не можете использовать отражение, и вы не должны этого делать в любом случае.

Если вам нужна такая функциональность, используйте прокси, например, через реализацию RealProxy, которая перехватывает вызов для тебя. Затем вы можете проверить и изменить любой параметр до того, как будет сделан фактический вызов (или даже не выполнять исходный вызов, это зависит от вас).

4
ответ дан 30 November 2019 в 02:00
поделиться

Вы не можете этого сделать. Отражение работает с метаданными, внедренными во время компиляции, и в то время значения параметров неизвестны.

4
ответ дан 30 November 2019 в 02:00
поделиться

Рассматривали ли вы возможность использования АОП, например PostSharp ?

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

4
ответ дан 30 November 2019 в 02:00
поделиться

Вы не можете получить значение параметров метода с помощью отражения. Потому что отражение возвращает информацию о метаданных. Если вы хотите получить значение определенного поля или свойства, вам также необходимо использовать экземпляр (как вы уже знаете).

Есть несколько способов получить значение параметра, используя внутренние каналы .NET framework, а именно API профилировщика и API отладчика.

Вы можете использовать АОП для того, что пытаетесь сделать, есть проект Codeplex под названием CThru , который может вам помочь - с помощью CThru вы можете перехватить метод, когда он вызывается, и получить параметры, которые он был вызван с.

2
ответ дан 30 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: