AppContext Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Tagokat biztosít az alkalmazás környezetére vonatkozó adatok beállításához és lekéréséhez.
public ref class AppContext abstract sealed
public static class AppContext
type AppContext = class
Public Class AppContext
- Öröklődés
-
AppContext
Megjegyzések
Az AppContext osztály lehetővé teszi a könyvtárírók számára, hogy egységes leiratkozási mechanizmust biztosítsanak az új funkciókhoz a felhasználók számára. Lazán összekapcsolt szerződést hoz létre az összetevők között a leiratkozási kérelem közlése érdekében. Ez a képesség általában fontos a meglévő funkciók módosításakor. Ezzel szemben már implicit módon is engedélyezve van az új funkciók használata.
AppContext könyvtárfejlesztőknek
A kódtárak az AppContext osztály használatával definiálják és teszik elérhetővé a kompatibilitási kapcsolókat, míg a tár felhasználói beállíthatják, hogy ezek a kapcsolók befolyásolják a tár működését. Alapértelmezés szerint a kódtárak biztosítják az új funkciókat, és csak akkor módosítják (vagyis az előző funkciót) ha a kapcsoló be van állítva. Ez lehetővé teszi, hogy a kódtárak új viselkedést biztosítsanak egy meglévő API-hoz, miközben továbbra is támogatják az előző viselkedéstől függő hívókat.
A kapcsoló nevének megadása
A leggyakoribb módja annak, hogy a könyvtár felhasználói kikapcsolják a viselkedés megváltoztatását, ha elnevezett kapcsolót definiálnak. Az value elem egy név/érték pár, amely egy kapcsoló nevéből és értékéből Boolean áll. Alapértelmezés szerint a kapcsoló mindig implicit módon falseműködik, ami biztosítja az új viselkedést (és alapértelmezés szerint az új viselkedést is bekapcsolja). A kapcsoló true beállítása engedélyezi, ami a korábbi viselkedést biztosítja. Az új viselkedést az is biztosítja, ha explicit módon beállítja a kapcsolót false-ra.
Érdemes konzisztens formátumot használni a kapcsolónevekhez, mivel ezek egy kódtár által közzétett hivatalos szerződés. A következő két nyilvánvaló formátum:
- Kapcsoló.névtér.kapcsolónév
- Kapcsoló.könyvtár.kapcsolónév
A kapcsoló definiálása és dokumentálása után a hívók programozott módon hívhatják meg a AppContext.SetSwitch(String, Boolean) metódust.
A beállítás ellenőrzése
A metódus meghívásával AppContext.TryGetSwitch ellenőrizheti, hogy a fogyasztó deklarálta-e a kapcsoló értékét, és megfelelően jár-e el. A metódus akkor ad vissza értéket true , ha az switchName argumentum megtalálható, és az isEnabled argumentuma a kapcsoló értékét jelzi. Ellenkező esetben a metódus ad vissza false.
Example
Az alábbi példa az osztály használatát AppContext mutatja be, amely lehetővé teszi az ügyfél számára a kódtár-metódus eredeti viselkedésének kiválasztását. A következő a(z) StringLibrary nevű könyvtár 1.0-s verziója. Meghatároz egy metódust SubstringStartsAt , amely egy nagyobb sztringen belüli részsztring kezdő indexének meghatározásához végez sorszám-összehasonlítást.
using System;
using System.Reflection;
[assembly: AssemblyVersion("1.0.0.0")]
public static class StringLibrary1
{
public static int SubstringStartsAt(string fullString, string substr)
{
return fullString.IndexOf(substr, StringComparison.Ordinal);
}
}
open System
open System.Reflection
[<assembly: AssemblyVersion("1.0.0.0")>]
do ()
module StringLibrary =
let substringStartsAt (fullString: string) (substr: string) =
fullString.IndexOf(substr, StringComparison.Ordinal)
Imports System.Reflection
<Assembly: AssemblyVersion("1.0.0.0")>
Public Class StringLibrary
Public Shared Function SubstringStartsAt(fullString As String, substr As String) As Integer
Return fullString.IndexOf(substr, StringComparison.Ordinal)
End Function
End Class
Az alábbi példa ezt követően a könyvtárat használja, hogy megtalálja a "archæ" szóközi rész kezdő indexét a "The archaeologist" kifejezésben. Mivel a módszer sorrendi összehasonlítást végez, a részsztring nem található meg.
using System;
public class Example1
{
public static void Main()
{
string value = "The archaeologist";
string substring = "archæ";
int position = StringLibrary1.SubstringStartsAt(value, substring);
if (position >= 0)
Console.WriteLine($"'{substring}' found in '{value}' starting at position {position}");
else
Console.WriteLine($"'{substring}' not found in '{value}'");
}
}
// The example displays the following output:
// 'archæ' not found in 'The archaeologist'
let value = "The archaeologist"
let substring = "archæ"
let position =
StringLibrary.substringStartsAt value substring
if position >= 0 then
printfn $"'{substring}' found in '{value}' starting at position {position}"
else
printfn $"'{substring}' not found in '{value}'"
// The example displays the following output:
// 'archæ' not found in 'The archaeologist'
Public Module Example4
Public Sub Main()
Dim value As String = "The archaeologist"
Dim substring As String = "archæ"
Dim position As Integer = StringLibrary.SubstringStartsAt(value, substring)
If position >= 0 Then
Console.WriteLine("'{0}' found in '{1}' starting at position {2}",
substring, value, position)
Else
Console.WriteLine("'{0}' not found in '{1}'", substring, value)
End If
End Sub
End Module
' The example displays the following output:
' 'archæ' not found in 'The archaeologist'
A kódtár 2.0-s verziója azonban megváltoztatja a metódust a SubstringStartsAt kultúraérzékeny összehasonlítás használatára.
using System;
using System.Reflection;
[assembly: AssemblyVersion("2.0.0.0")]
public static class StringLibrary2
{
public static int SubstringStartsAt(string fullString, string substr)
{
return fullString.IndexOf(substr, StringComparison.CurrentCulture);
}
}
open System
open System.Reflection
[<assembly: AssemblyVersion("2.0.0.0")>]
do ()
module StringLibrary =
let substringStartsAt (fullString: string) (substr: string) =
fullString.IndexOf(substr, StringComparison.CurrentCulture)
Imports System.Reflection
<Assembly: AssemblyVersion("2.0.0.0")>
Public Class StringLibrary
Public Shared Function SubstringStartsAt(fullString As String, substr As String) As Integer
Return fullString.IndexOf(substr, StringComparison.CurrentCulture)
End Function
End Class
Amikor az alkalmazást újrafordítjuk, hogy az új könyvtárverzióval működjön, most azt jelzi, hogy az "archæ" részlet a 4. indexen található a "The archaeologist" (A régész) szövegben.
using System;
public class Example2
{
public static void Main()
{
string value = "The archaeologist";
string substring = "archæ";
int position = StringLibrary2.SubstringStartsAt(value, substring);
if (position >= 0)
Console.WriteLine($"'{substring}' found in '{value}' starting at position {position}");
else
Console.WriteLine($"'{substring}' not found in '{value}'");
}
}
// The example displays the following output:
// 'archæ' found in 'The archaeologist' starting at position 4
let value = "The archaeologist"
let substring = "archæ"
let position =
StringLibrary.substringStartsAt value substring
if position >= 0 then
printfn $"'{substring}' found in '{value}' starting at position {position}"
else
printfn $"'{substring}' not found in '{value}'"
// The example displays the following output:
// 'archæ' found in 'The archaeologist' starting at position 4
Public Module Example6
Public Sub Main()
Dim value As String = "The archaeologist"
Dim substring As String = "archæ"
Dim position As Integer = StringLibrary.SubstringStartsAt(value, substring)
If position >= 0 Then
Console.WriteLine("'{0}' found in '{1}' starting at position {2}",
substring, value, position)
Else
Console.WriteLine("'{0}' not found in '{1}'", substring, value)
End If
End Sub
End Module
' The example displays the following output:
' 'archæ' found in 'The archaeologist' starting at position 4
Ez a módosítás megakadályozhatja, hogy egy kapcsoló definiálásával feltörje az eredeti viselkedéstől függő alkalmazásokat. Ebben az esetben a kapcsoló neve StringLibrary.DoNotUseCultureSensitiveComparison. Az alapértelmezett érték azt jelzi, falsehogy a tárnak végre kell hajtania a 2.0-s verzió kulturális szempontból érzékeny összehasonlítását.
true azt jelzi, hogy a könyvtárnak végre kell hajtania az 1.0-s verziójú sorszám-összehasonlítást. Az előző kód enyhe módosítása lehetővé teszi, hogy a kódtár-fogyasztó beállítsa a kapcsolót, hogy meghatározza a metódus által végrehajtott összehasonlítás módját.
using System;
using System.Reflection;
[assembly: AssemblyVersion("2.0.0.0")]
public static class StringLibrary
{
public static int SubstringStartsAt(string fullString, string substr)
{
bool flag;
if (AppContext.TryGetSwitch("StringLibrary.DoNotUseCultureSensitiveComparison", out flag) && flag == true)
return fullString.IndexOf(substr, StringComparison.Ordinal);
else
return fullString.IndexOf(substr, StringComparison.CurrentCulture);
}
}
open System
open System.Reflection
[<assembly: AssemblyVersion("2.0.0.0")>]
do ()
AppContext.SetSwitch("StringLibrary.DoNotUseCultureSensitiveComparison",true)
module StringLibrary =
let substringStartsAt (fullString: string) (substr: string) =
match AppContext.TryGetSwitch "StringLibrary.DoNotUseCultureSensitiveComparison" with
| true, true -> fullString.IndexOf(substr, StringComparison.Ordinal)
| _ -> fullString.IndexOf(substr, StringComparison.CurrentCulture)
Imports System.Reflection
<Assembly: AssemblyVersion("2.0.0.0")>
Public Class StringLibrary
Public Shared Function SubstringStartsAt(fullString As String, substr As String) As Integer
Dim flag As Boolean
If AppContext.TryGetSwitch("StringLibrary.DoNotUseCultureSensitiveComparison", flag) AndAlso flag = True Then
Return fullString.IndexOf(substr, StringComparison.Ordinal)
Else
Return fullString.IndexOf(substr, StringComparison.CurrentCulture)
End If
End Function
End Class
AppContext könyvtárfelhasználóknak
Ha Ön a könyvtár felhasználója, az AppContext osztály lehetővé teszi, hogy kihasználja a könyvtár vagy a könyvtár metódusának új funkcióihoz való kilépési mechanizmusát. A meghívni kívánt osztálytár egyes metódusai meghatározott kapcsolókat határoznak meg, amelyek új viselkedést engedélyeznek vagy tiltanak le. A kapcsoló értéke egy logikai érték. Ha ez falseaz alapértelmezett érték, akkor az új viselkedés engedélyezve van; ha igen true, az új viselkedés le van tiltva, és a tag ugyanúgy viselkedik, mint korábban.
A kapcsoló értékét úgy állíthatja be, hogy meghívja a AppContext.SetSwitch(String, Boolean) metódust a kódban. Az switchName argumentum határozza meg a kapcsoló nevét, a isEnabled tulajdonság pedig a kapcsoló értékét. Mivel AppContext statikus osztályról van szó, alkalmazásonkénti tartományonként érhető el. A AppContext.SetSwitch(String, Boolean) hívásának alkalmazási hatóköre van, vagyis csak az alkalmazásra van hatással.
ASP.NET Core alkalmazásokhoz úgy állíthat be kapcsolót, hogy hozzáad egy <Add> elemet a web.config fájl <appSettings> szakaszához. Például:
<appSettings>
<add key="AppContext.SetSwitch:switchName1" value="switchValue1" />
<add key="AppContext.SetSwitch:switchName2" value="switchValue2" />
</appSettings>
Ha ugyanazt a kapcsolót több módon is beállítja, a többi beállítás felülbírálásának sorrendje a következő:
- A programszerű beállítás.
- A beállítás a web.config fájlban (ASP.NET Core alkalmazásokhoz).
Tulajdonságok
| Name | Description |
|---|---|
| BaseDirectory |
Lekéri az alkalmazás alapkönyvtárának fájl elérési útját. |
| TargetFrameworkName |
Lekéri az aktuális alkalmazás által megcélzott keretrendszerverzió nevét. |
Metódusok
| Name | Description |
|---|---|
| GetData(String) |
Az aktuális alkalmazástartományhoz rendelt elnevezett adatelem értékét adja vissza. |
| SetData(String, Object) |
Beállítja az aktuális alkalmazástartományhoz rendelt elnevezett adatelem értékét. |
| SetSwitch(String, Boolean) |
Egy kapcsoló értékét állítja be. |
| TryGetSwitch(String, Boolean) |
Megpróbálja lekérni egy kapcsoló értékét. |