SharpNinja.Extensions.WindowsAppSdkHost 1.2.0

dotnet add package SharpNinja.Extensions.WindowsAppSdkHost --version 1.2.0                
NuGet\Install-Package SharpNinja.Extensions.WindowsAppSdkHost -Version 1.2.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SharpNinja.Extensions.WindowsAppSdkHost" Version="1.2.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SharpNinja.Extensions.WindowsAppSdkHost --version 1.2.0                
#r "nuget: SharpNinja.Extensions.WindowsAppSdkHost, 1.2.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SharpNinja.Extensions.WindowsAppSdkHost as a Cake Addin
#addin nuget:?package=SharpNinja.Extensions.WindowsAppSdkHost&version=1.2.0

// Install SharpNinja.Extensions.WindowsAppSdkHost as a Cake Tool
#tool nuget:?package=SharpNinja.Extensions.WindowsAppSdkHost&version=1.2.0                

Windows App SDK Host

Allows hosting a Windows App SDK Application in an IHost that manages the lifecycle of the hosted Application.

Packages

Usage

(Convert existing project or the default template's output)

  1. Add <DefineConstants>DISABLE_XAML_GENERATED_MAIN</DefineConstants> in the main PropertyGroup of your applications project file.
  2. Add reference to CommunityToolkit.Extensions.Hosting.WindowsAppSdk
  3. Add Program.cs to the root of your application project.
  4. Add this code to the 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();
    }
}
  1. Set your Program.cs as the startup object by adding <StartupObject>HostedWindowsAppSdk.Program</StartupObject> to your project file.
  2. Use the 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>
  1. Update your App.xaml.cs to use dependency injection.
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
    // Get window from Dependency Injection.
    _mWindow = Services.GetRequiredService<MainWindow>();


    _mWindow.Activate();
}

Notes

The WindowsAppSdkHost uses several features of the Microsoft.Extensions ecosystem:

  1. Includes all configuration resources defined for the DefaultHostBuilder.
  2. Registers the required CancellableApplication with dependency injection.
  3. Manages the lifecycle of the Application in the StartAsync method of the WindowsAppSdkHost.
  4. Write unhandled errors to default 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.

Product Compatible and additional computed target framework versions.
.NET net5.0-windows10.0.19041 is compatible.  net6.0-windows was computed.  net6.0-windows10.0.19041 is compatible.  net7.0-windows was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.0 2,280 7/24/2022
1.1.2 811 5/15/2022
1.0.7 482 3/7/2022