FeatureSwitchDefinitionAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что указанное общедоступное логическое свойство соответствует параметру функции, указанному по имени.
public ref class FeatureSwitchDefinitionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Property, Inherited=false)]
public sealed class FeatureSwitchDefinitionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Property, Inherited=false)>]
type FeatureSwitchDefinitionAttribute = class
inherit Attribute
Public NotInheritable Class FeatureSwitchDefinitionAttribute
Inherits Attribute
- Наследование
- Атрибуты
Примеры
if (Feature.IsSupported)
Feature.Implementation();
public class Feature
{
[FeatureSwitchDefinition("Feature.IsSupported")]
internal static bool IsSupported => AppContext.TryGetSwitch("Feature.IsSupported", out bool isEnabled) ? isEnabled : true;
internal static Implementation() => ...;
}
Когда приложение обрезается следующими параметрами компонентов в файле проекта, Feature.IsSupported обрабатывается как falseи Feature.Implementation код удаляется.
<ItemGroup>
<RuntimeHostConfigurationOption Include="Feature.IsSupported" Value="false" Trim="true" />
</ItemGroup>
Комментарии
Перезаписи IL и компиляторы могут использовать этот атрибут для замены возвращаемого значения указанного свойства значением коммутатора функции.
Значение переключателя функций можно указать только на уровне приложения и влияет на все приложение. Вы можете попасть в ситуации, когда одна библиотека, которая является частью приложения, требует включения переключателя функции, но не имеет способа связать это с автором приложения.
Переключения функций усложняют модульное тестирование и совместное использование кода, так как разные конфигурации приложений могут иметь разные значения коммутатора функций, и трудно обеспечить правильность работы всех путей кода.
Поэтому предпочтительнее структурировать API таким образом, что обрезка может произойти естественным образом без каких-либо коммутаторов функций. Использование коммутаторов функций должно быть зарезервировано для ситуаций, когда необходимо выполнить обрезку, но невозможно изменить API, чтобы разрешить обрезку естественно.
Конструкторы
| Имя | Описание |
|---|---|
| FeatureSwitchDefinitionAttribute(String) |
Инициализирует новый экземпляр FeatureSwitchDefinitionAttribute класса с указанным именем переключателя компонентов. |
Свойства
| Имя | Описание |
|---|---|
| SwitchName |
Имя переключателя компонента, предоставляющего значение для указанного свойства. |
| TypeId |
При реализации в производном классе получает уникальный идентификатор для этого Attribute. (Унаследовано от Attribute) |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от Attribute) |
| GetHashCode() |
Возвращает хэш-код для этого экземпляра. (Унаследовано от Attribute) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| IsDefaultAttribute() |
При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса. (Унаследовано от Attribute) |
| Match(Object) |
При переопределении в производном классе возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от Attribute) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |