FeatureSwitchDefinitionAttribute Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica que a propriedade pública estática Booleana de apenas leitura especificada corresponde ao comutador de características especificado pelo nome.
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
- Herança
- Atributos
Exemplos
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() => ...;
}
Quando o aplicativo é cortado com as seguintes configurações de recurso no arquivo de projeto, Feature.IsSupported é tratado como false, e Feature.Implementation o código é removido.
<ItemGroup>
<RuntimeHostConfigurationOption Include="Feature.IsSupported" Value="false" Trim="true" />
</ItemGroup>
Observações
Reescritores e compiladores de IL podem usar este atributo para substituir o valor de retorno da propriedade especificada pelo valor do feature switch.
O valor do interruptor de funcionalidade só pode ser especificado ao nível da aplicação e afeta toda a aplicação. É possível chegar a situações em que uma biblioteca que faz parte da aplicação exige que o interruptor de funcionalidade seja ativado, mas não tem forma de comunicar isso ao autor da aplicação.
As trocas de funcionalidades complicam os testes unitários e a partilha de código, pois diferentes configurações de aplicação podem ter valores diferentes do interruptor de funcionalidade, e é difícil garantir que todos os caminhos de código funcionam como esperado.
Por isso, é preferível estruturar as APIs de forma a que o cutting possa acontecer naturalmente, sem qualquer alteração de funcionalidades. O uso de interruptores de funcionalidades deveria ser reservado para situações em que seja necessário cortar, mas não é viável alterar as APIs para permitir o corte de forma natural.
Construtores
| Name | Description |
|---|---|
| FeatureSwitchDefinitionAttribute(String) |
Inicializa uma nova instância da FeatureSwitchDefinitionAttribute classe com o nome do interruptor de funcionalidade especificado. |
Propriedades
| Name | Description |
|---|---|
| SwitchName |
O nome do interruptor de funcionalidade que fornece o valor para a propriedade especificada. |
| TypeId |
Quando implementado numa classe derivada, obtém um identificador único para esta Attribute. (Herdado de Attribute) |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| GetHashCode() |
Devolve o código de hash para esta instância. (Herdado de Attribute) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsDefaultAttribute() |
Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute) |
| Match(Object) |
Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |