Allows hosting a Windows App SDK Application in an `IHost` that manages the lifecycle of the hosted Application.
$ dotnet add package SharpNinja.Extensions.WindowsAppSdkHostAllows hosting a Windows App SDK Application in an IHost that manages the lifecycle of the hosted Application.
(Convert existing project or the default template's output)
<DefineConstants>DISABLE_XAML_GENERATED_MAIN</DefineConstants> in the main PropertyGroup of your applications project file.CommunityToolkit.Extensions.Hosting.WindowsAppSdkProgram.cs to the root of your application project.Program.cs:public static class Program
{
[STAThread]
public static void Main(string[] args)
{
var builder = new WindowsAppSdkHostBuilder<App>();
builder.ConfigureServices(
(_, collection) =>
{
// If your main Window is named differently, change it here.
collection.AddSingleton<MainWindow>();
}
);
var app = builder.Build();
app.StartAsync().GetAwaiter().GetResult();
}
}
Program.cs as the startup object by adding <StartupObject>HostedWindowsAppSdk.Program</StartupObject> to your project file.CancelableApplication as the base class of your application by modifying your App.xaml:<host:CancelableApplication
x:Class="HostedWindowsAppSdk.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:host="using:CommunityToolkit.Extensions.Hosting"
xmlns:local="using:HostedWindowsAppSdk">
<Application.Resources>
</Application.Resources>
</host:CancelableApplication>
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
// Get window from Dependency Injection.
_mWindow = Services.GetRequiredService<MainWindow>();
_mWindow.Activate();
}
The WindowsAppSdkHost uses several features of the Microsoft.Extensions ecosystem:
DefaultHostBuilder.CancellableApplication with dependency injection.StartAsync method of the WindowsAppSdkHost.ILogger. The Ilogger can be obtained from the static Services property of the CancellableApplication after building the app.If there are other patterns you feel should be available or required then start a discussion.