Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az alkalmazásbővítmények lehetővé teszik, hogy az alkalmazás más csomagokból származó bővítménytartalmakat és funkciókat üzemeltetjön. Ez a beépülő modulmodell Windows megfelelője. A bővítményszolgáltató deklarálja a tartalmat vagy szolgáltatásokat, és a gazdaalkalmazás futásidőben észleli és betölti őket.
Important
Az alkalmazásbővítményekhez mind a gazdaalkalmazás, mind a bővítményalkalmazások esetében MSIX-csomagidentitás szükséges. A bővítmények felderítése a csomagkatalóguson keresztül történik.
Az alkalmazásbővítmények működése
Az alkalmazásbővítmény-modell két szerepkörrel rendelkezik:
- Bővítménygazda – Az alkalmazás deklarálja, hogy milyen bővítménytípusokat fogad el, és felderíti a telepített bővítményeket.
- Bővítményszolgáltató – Egy másik alkalmazás (vagy ugyanaz az alkalmazás) deklarálja, hogy egy adott típusú bővítményt biztosít.
A bővítmények nem kódon keresztül, hanem a csomagjegyzék-deklarációkon keresztül kommunikálnak. A gazdaalkalmazás az AppExtensionCatalog API-t használja a telepített bővítmények megkereséséhez és kezeléséhez.
Bővítménygazda deklarálása
Adjon hozzá egy AppExtensionHost deklarációt az alkalmazás Package.appxmanifest részéhez:
<Package xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" ...>
<Applications>
<Application ...>
<Extensions>
<uap3:Extension Category="windows.appExtensionHost">
<uap3:AppExtensionHost>
<uap3:Name>com.example.myapp.extensions</uap3:Name>
</uap3:AppExtensionHost>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Bővítményszolgáltató deklarálása
A bővítményalkalmazásban Package.appxmanifest:
<Package xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" ...>
<Applications>
<Application ...>
<Extensions>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.example.myapp.extensions"
Id="MathExtension"
DisplayName="Math Functions"
Description="Provides math operations"
PublicFolder="Public">
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
</Package>
A PublicFolder a bővítménycsomag egy olyan mappájára mutat, amelyet a gazdaalkalmazás olvasni tud.
Bővítmények felderítése és betöltése
A gazdaalkalmazásban a telepített bővítmények felderítésére használhatja AppExtensionCatalog :
private AppExtensionCatalog? _catalog;
private async Task InitializeExtensionsAsync()
{
_catalog = AppExtensionCatalog.Open("com.example.myapp.extensions");
_catalog.PackageInstalled += OnExtensionInstalled;
_catalog.PackageUpdated += OnExtensionUpdated;
_catalog.PackageUninstalling += OnExtensionRemoved;
var extensions = await _catalog.FindAllAsync();
foreach (var extension in extensions)
{
await LoadExtensionAsync(extension);
}
}
private async Task LoadExtensionAsync(AppExtension extension)
{
string extensionId = extension.Id;
string displayName = extension.DisplayName;
// Get the extension's public folder
var folder = await extension.GetPublicFolderAsync();
if (folder != null)
{
// Read configuration, content, or scripts from the folder
var configFile = await folder.TryGetItemAsync("config.json");
if (configFile != null)
{
// Parse and use the extension configuration
}
}
}
// See "Handle extension lifecycle events" below for the
// OnExtensionInstalled, OnExtensionUpdated, and OnExtensionRemoved handlers.
private async void OnExtensionInstalled(AppExtensionCatalog sender,
AppExtensionPackageInstalledEventArgs args) { }
private async void OnExtensionUpdated(AppExtensionCatalog sender,
AppExtensionPackageUpdatedEventArgs args) { }
private void OnExtensionRemoved(AppExtensionCatalog sender,
AppExtensionPackageUninstallingEventArgs args) { }
Bővítmény életciklus-eseményeinek kezelése
private async Task LoadExtensionAsync(AppExtension extension) => await Task.CompletedTask;
// (See "Discover and load extensions" above for the real implementation.)
private async void OnExtensionInstalled(AppExtensionCatalog sender,
AppExtensionPackageInstalledEventArgs args)
{
// Re-query the catalog to get the AppExtension instances added by this package
var extensions = await sender.FindAllAsync();
foreach (var extension in extensions.Where(e => e.Package.Id.FamilyName == args.Package.Id.FamilyName))
{
await LoadExtensionAsync(extension);
}
}
private void OnExtensionRemoved(AppExtensionCatalog sender,
AppExtensionPackageUninstallingEventArgs args)
{
// args.Package identifies the package that is uninstalling
string familyName = args.Package.Id.FamilyName;
// Remove any extensions from that package from your app
}
private async void OnExtensionUpdated(AppExtensionCatalog sender,
AppExtensionPackageUpdatedEventArgs args)
{
// Re-query the catalog to get the refreshed AppExtension instances
var extensions = await sender.FindAllAsync();
foreach (var extension in extensions.Where(e => e.Package.Id.FamilyName == args.Package.Id.FamilyName))
{
// Reload with updated content
await LoadExtensionAsync(extension);
}
}
Kapcsolódó tartalom
Windows developer