Как иметь код в конструкторе, который НЕ будет выполняться во время проектирования Visual Studio?

Для NHibernate, я определенно рекомендовал бы просто дразнить NHibernate API для модульных тестов - доверяют библиотеке, чтобы сделать правильную вещь. Если Вы хотите удостовериться, что данные на самом деле переходят к DB, сделайте интеграционный тест.

17
задан mskfisher 2 November 2011 в 14:48
поделиться

3 ответа

Как утверждали другие, вы можете использовать свойство DesignMode класса Component . Однако вы не сможете сделать это в конструкторе вашего элемента управления. Свойство DesignMode всегда имеет значение false в конструкторе и методах, вызываемых конструктором. Чтобы обойти это, измените код для подключения к базе данных в функции обратного вызова OnLoad () . Свойство DesignMode действительно в этот момент. См. здесь для объяснения (ищите раздел DesignMode статьи).

Я только что наткнулся на эту запись в блоге , в которой описывается, как использовать System.ComponentModel . LicenseManager.UsageMode для выполнения того же действия. В блоге описывается дополнительный недостаток свойства DesignMode при работе с вложенными элементами управления. Судя по всему, свойство UsageMode не имеет таких недостатков и доступно для использования в конструкторе. Я не могу лично за это поручиться, но, возможно, стоит изучить этот вопрос.

27
ответ дан 30 November 2019 в 11:17
поделиться

В Windows Forms?

if (!DesignMode)
{
    // code that shouldn't be executed at design time
}

Как уже упоминалось, это не будет работать в конструкторе. Часто используется в событии Form.Load .

14
ответ дан 30 November 2019 в 11:17
поделиться

Взгляните на это свойство

Component.DesignMode

1
ответ дан 30 November 2019 в 11:17
поделиться
Другие вопросы по тегам:

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