Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ekstensi aplikasi memungkinkan aplikasi Anda meng-host konten dan fungsionalitas add-in dari paket lain. Ini adalah padanan model plug-in di Windows. Penyedia ekstensi mendeklarasikan konten atau layanan, dan aplikasi host Anda menemukan dan memuatnya saat runtime.
Important
Ekstensi aplikasi memerlukan identitas paket MSIX untuk aplikasi host dan ekstensi. Ekstensi ditemukan melalui katalog paket.
Cara kerja ekstensi aplikasi
Model ekstensi aplikasi memiliki dua peran:
- Host ekstensi — Aplikasi Anda menyatakan jenis ekstensi mana yang diterimanya dan menemukan ekstensi yang diinstal.
- Penyedia ekstensi — Aplikasi lain (atau aplikasi yang sama) menyatakan bahwa aplikasi tersebut menyediakan ekstensi jenis tertentu.
Ekstensi berkomunikasi melalui deklarasi manifes paket, bukan melalui kode. Aplikasi host menggunakan API AppExtensionCatalog untuk menemukan dan mengelola ekstensi yang diinstal.
Deklarasikan host ekstensi
AppExtensionHost Tambahkan deklarasi ke aplikasi Package.appxmanifestAnda:
<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>
Mendeklarasikan penyedia ekstensi
Di aplikasi ekstensi 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>
PublicFolder menunjuk ke folder dalam paket ekstensi yang dapat dibaca oleh aplikasi host.
Menemukan dan memuat ekstensi
Di aplikasi host Anda, gunakan AppExtensionCatalog untuk menemukan ekstensi yang terinstal:
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) { }
Menangani kejadian siklus hidup ekstensi
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);
}
}
Konten terkait
Windows developer