Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uygulama uzantıları, uygulamanızın eklenti içeriğini ve işlevlerini diğer paketlerden barındırmasına olanak sağlar. Bu, eklenti modelinin Windows eşdeğeridir. Uzantı sağlayıcısı içeriği veya hizmetleri bildirir ve konak uygulamanız bunları çalışma zamanında bulur ve yükler.
Important
Uygulama uzantıları, hem konak hem de uzantı uygulamaları için MSIX paket kimliği gerektirir. Uzantılar paket kataloğu aracılığıyla bulunur.
Uygulama uzantıları nasıl çalışır?
Uygulama uzantısı modelinin iki rolü vardır:
- Uzantı konağı — Uygulamanız hangi uzantı türlerini kabul ettiğini bildirir ve yüklü uzantıları bulur.
- Uzantı sağlayıcısı — Başka bir uygulama (veya aynı uygulama), belirli bir türde bir uzantı sağladığını bildirir.
Uzantılar kod aracılığıyla değil paket bildirimi bildirimleriyle iletişim kurar. Konak uygulaması yüklü uzantıları bulmak ve yönetmek için AppExtensionCatalog API'sini kullanır.
Uzantı konağı bildirme
Uygulamanızın AppExtensionHostuygulamasına bir Package.appxmanifest bildirim ekleyin:
<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>
Uzantı sağlayıcısı bildirme
Uzantı uygulamasının Package.appxmanifestiçinde:
<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, ana uygulamanın okuyabildiği uzantı paketindeki bir klasörü işaret eder.
Uzantıları bulma ve yükleme
Ana uygulamanızda, yüklü uzantıları keşfetmek için AppExtensionCatalog kullanın:
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) { }
Uzantı yaşam döngüsü olaylarını işleme
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);
}
}
İlgili içerik
Windows developer