Skip to content

Smdn.Net.MuninNode.Hosting version 3.3.0

Latest

Choose a tag to compare

@smdn smdn released this 20 Jun 06:17
· 1 commit to main since this release
Immutable release. Only release title and notes can be modified.
844299f

Released package

Release notes

The full release notes are available at gist.

Change log

Change log in this release:

API changes

API changes in this release:
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
index 6dc1f88..9363286 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net10.0.apilist.cs
@@ -1,54 +1,55 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
 //   Name: Smdn.Net.MuninNode.Hosting
-//   AssemblyVersion: 3.2.0.0
-//   InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   AssemblyVersion: 3.3.0.0
+//   InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   TargetFramework: .NETCoreApp,Version=v10.0
 //   Configuration: Release
 //   Metadata: IsTrimmable=True
+//   Metadata: IsAotCompatible=True
 //   Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
 //   Metadata: RepositoryBranch=main
-//   Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   Referenced assemblies:
-//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
 //     System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Diagnostics.CodeAnalysis;
 using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
 using Smdn.Net.MuninNode.Hosting;
 
 namespace Smdn.Net.MuninNode.Hosting {
   public static class IServiceCollectionExtensions {
     public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
   }
 
   public class MuninNodeBackgroundService : BackgroundService {
     public MuninNodeBackgroundService(IMuninNode node) {}
     public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
 
     public EndPoint EndPoint { get; }
     protected ILogger? Logger { get; }
 
     public override void Dispose() {}
     protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
     public override async Task StartAsync(CancellationToken cancellationToken) {}
     public override async Task StopAsync(CancellationToken cancellationToken) {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
index 974b83f..74b736e 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-net8.0.apilist.cs
@@ -1,54 +1,54 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
 //   Name: Smdn.Net.MuninNode.Hosting
-//   AssemblyVersion: 3.2.0.0
-//   InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   AssemblyVersion: 3.3.0.0
+//   InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   TargetFramework: .NETCoreApp,Version=v8.0
 //   Configuration: Release
 //   Metadata: IsTrimmable=True
 //   Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
 //   Metadata: RepositoryBranch=main
-//   Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   Referenced assemblies:
-//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
 //     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 //     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
 #nullable enable annotations
 
 using System;
 using System.Diagnostics.CodeAnalysis;
 using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
 using Smdn.Net.MuninNode.Hosting;
 
 namespace Smdn.Net.MuninNode.Hosting {
   public static class IServiceCollectionExtensions {
     public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
   }
 
   public class MuninNodeBackgroundService : BackgroundService {
     public MuninNodeBackgroundService(IMuninNode node) {}
     public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
 
     public EndPoint EndPoint { get; }
     protected ILogger? Logger { get; }
 
     public override void Dispose() {}
     protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
     public override async Task StartAsync(CancellationToken cancellationToken) {}
     public override async Task StopAsync(CancellationToken cancellationToken) {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
diff --git a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
index 359d398..51c5a47 100644
--- a/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
+++ b/doc/api-list/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting-netstandard2.1.apilist.cs
@@ -1,51 +1,51 @@
-// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.2.0)
+// Smdn.Net.MuninNode.Hosting.dll (Smdn.Net.MuninNode.Hosting-3.3.0)
 //   Name: Smdn.Net.MuninNode.Hosting
-//   AssemblyVersion: 3.2.0.0
-//   InformationalVersion: 3.2.0+e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   AssemblyVersion: 3.3.0.0
+//   InformationalVersion: 3.3.0+55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   TargetFramework: .NETStandard,Version=v2.1
 //   Configuration: Release
 //   Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.MuninNode
 //   Metadata: RepositoryBranch=main
-//   Metadata: RepositoryCommit=e0dd656596dd5517e6360ee27212b5a87aa0228c
+//   Metadata: RepositoryCommit=55422fb656d2f24e6cd86e3f61cb7f9383ff5975
 //   Referenced assemblies:
-//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
-//     Smdn.Net.MuninNode, Version=2.5.0.0, Culture=neutral
+//     Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Hosting.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
+//     Smdn.Net.MuninNode, Version=2.7.0.0, Culture=neutral
 //     netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
 #nullable enable annotations
 
 using System;
 using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Smdn.Net.MuninNode;
 using Smdn.Net.MuninNode.DependencyInjection;
 using Smdn.Net.MuninNode.Hosting;
 
 namespace Smdn.Net.MuninNode.Hosting {
   public static class IServiceCollectionExtensions {
     public static IServiceCollection AddHostedMuninNodeService(this IServiceCollection services, Action<MuninNodeOptions> configureNode, Action<IMuninNodeBuilder> buildNode) {}
     public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNode, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNode : class, IMuninNode where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNodeBuilder>(this IServiceCollection services, Func<IMuninServiceBuilder, TMuninNodeBuilder> buildMunin) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeBuilder : MuninNodeBuilder {}
     public static IServiceCollection AddHostedMuninNodeService<TMuninNodeBackgroundService, TMuninNodeService, TMuninNodeImplementation, TMuninNodeOptions, TMuninNodeBuilder>(this IServiceCollection services, Action<TMuninNodeOptions> configureNode, Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createNodeBuilder, Action<TMuninNodeBuilder> buildNode) where TMuninNodeBackgroundService : MuninNodeBackgroundService where TMuninNodeService : class, IMuninNode where TMuninNodeImplementation : class, TMuninNodeService where TMuninNodeOptions : MuninNodeOptions, new() where TMuninNodeBuilder : MuninNodeBuilder {}
   }
 
   public class MuninNodeBackgroundService : BackgroundService {
     public MuninNodeBackgroundService(IMuninNode node) {}
     public MuninNodeBackgroundService(IMuninNode node, ILogger<MuninNodeBackgroundService>? logger) {}
 
     public EndPoint EndPoint { get; }
     protected ILogger? Logger { get; }
 
     public override void Dispose() {}
     protected override async Task ExecuteAsync(CancellationToken stoppingToken) {}
     public override async Task StartAsync(CancellationToken cancellationToken) {}
     public override async Task StopAsync(CancellationToken cancellationToken) {}
   }
 }
-// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0.
-// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)
+// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.8.2.0.
+// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.6.2.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)

Full changes

Full changes in this release:
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
index 7480902..8c83d27 100644
--- a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting.csproj
@@ -1,11 +1,11 @@
-<!--
+<!--
 SPDX-FileCopyrightText: 2025 smdn <smdn@smdn.jp>
 SPDX-License-Identifier: MIT
 -->
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <TargetFrameworks>netstandard2.1;net8.0;net10.0</TargetFrameworks>
-    <VersionPrefix>3.2.0</VersionPrefix>
+    <VersionPrefix>3.3.0</VersionPrefix>
     <VersionSuffix></VersionSuffix>
     <PackageValidationBaselineVersion>3.0.0</PackageValidationBaselineVersion>
     <NoWarn>CS1591;$(NoWarn)</NoWarn> <!-- CS1591: Missing XML comment for publicly visible type or member 'Type_or_Member' -->
@@ -31,8 +31,8 @@ This library uses [Smdn.Net.MuninNode](https://www.nuget.org/packages/Smdn.Net.M
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
-    <ProjectOrPackageReference ReferencePackageVersion="[2.5.0,4.0.0)" Include="..\Smdn.Net.MuninNode\Smdn.Net.MuninNode.csproj" />
+    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
+    <ProjectOrPackageReference ReferencePackageVersion="[2.7.0,4.0.0)" Include="..\Smdn.Net.MuninNode\Smdn.Net.MuninNode.csproj" />
   </ItemGroup>
 
   <Target Name="GenerateReadmeFileContent">
@@ -55,6 +55,8 @@ Using the API of the `Smdn.Net.MuninNode.DependencyInjection` and `Smdn.Net.Muni
 $([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)..\..\examples\$(PackageId)\getting-started\Program.cs').TrimEnd())

+More examples can be found on the GitHub repository, including examples of using library features.
+

Contributing

This project welcomes contributions, feedbacks and suggestions. You can contribute to this project by submitting Issues or Pull Requests on the GitHub repository.
]]>
diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs
new file mode 100644
index 0000000..72af8cb
--- /dev/null
+++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.LoggerMessages.cs
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2026 smdn smdn@smdn.jp
+// SPDX-License-Identifier: MIT
+using Microsoft.Extensions.Logging;
+
+namespace Smdn.Net.MuninNode.Hosting;
+
+#pragma warning disable IDE0040
+partial class MuninNodeBackgroundService {
+#pragma warning restore IDE0040

  • [LoggerMessage(
  • Level = LogLevel.Information,
  • EventId = 1,
  • Message = "Munin node '{HostName}' starting."
  • )]
  • private static partial void LogInformationStarting(ILogger logger, string hostName);
  • [LoggerMessage(
  • Level = LogLevel.Information,
  • EventId = 2,
  • Message = "Munin node '{HostName}' started."
  • )]
  • private static partial void LogInformationStarted(ILogger logger, string hostName);
  • [LoggerMessage(
  • Level = LogLevel.Information,
  • EventId = 3,
  • Message = "Munin node '{HostName}' stopping."
  • )]
  • private static partial void LogInformationStopping(ILogger logger, string hostName);
  • [LoggerMessage(
  • Level = LogLevel.Information,
  • EventId = 4,
  • Message = "Munin node '{HostName}' stopped."
  • )]
  • private static partial void LogInformationStopped(ILogger logger, string hostName);
    +}
    diff --git a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
    index 459e79f..2f02262 100644
    --- a/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
    +++ b/src/Smdn.Net.MuninNode.Hosting/Smdn.Net.MuninNode.Hosting/MuninNodeBackgroundService.cs
    @@ -1,5 +1,9 @@
    // SPDX-FileCopyrightText: 2025 smdn smdn@smdn.jp
    // SPDX-License-Identifier: MIT
    +// cspell:ignore IMUNINNODELIFECYCLE
    +#if SYSTEM_THREADING_TASKS_TASK_WAITASYNC
    +#define IMUNINNODELIFECYCLE
    +#endif
    using System;
    using System.Net;
    using System.Threading;
    @@ -7,31 +11,11 @@ using System.Threading.Tasks;

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;

namespace Smdn.Net.MuninNode.Hosting;

-public class MuninNodeBackgroundService : BackgroundService {

  • private static readonly Action<ILogger, string, Exception?> LogStarting = LoggerMessage.Define(
  • LogLevel.Information,
  • eventId: default, // TODO
  • formatString: "Munin node '{HostName}' starting."
  • );
  • private static readonly Action<ILogger, string, Exception?> LogStarted = LoggerMessage.Define(
  • LogLevel.Information,
  • eventId: default, // TODO
  • formatString: "Munin node '{HostName}' started."
  • );
  • private static readonly Action<ILogger, string, Exception?> LogStopping = LoggerMessage.Define(
  • LogLevel.Information,
  • eventId: default, // TODO
  • formatString: "Munin node '{HostName}' stopping."
  • );
  • private static readonly Action<ILogger, string, Exception?> LogStopped = LoggerMessage.Define(
  • LogLevel.Information,
  • eventId: default, // TODO
  • formatString: "Munin node '{HostName}' stopped."
  • );

+public partial class MuninNodeBackgroundService : BackgroundService {
private IMuninNode node;

///
@@ -39,6 +23,10 @@ public class MuninNodeBackgroundService : BackgroundService {

protected ILogger? Logger { get; }

  • // In addition to the Logger property exposed outside the class, provide an
  • // ILogger field that is referenced by the LoggerMessage source generator.
  • private readonly ILogger logger;

#if false
// TODO: support ServiceKey
// this code does not work currently
@@ -70,6 +58,10 @@ public class MuninNodeBackgroundService : BackgroundService {
{
this.node = node ?? throw new ArgumentNullException(nameof(node));
Logger = logger;
+

  • // In addition to the Logger property, set a non-null ILogger field.
  • // This field is used by the LoggerMessage source generator.
  • this.logger = (ILogger?)logger ?? NullLogger.Instance;
    }

public override void Dispose()
@@ -91,13 +83,16 @@ public class MuninNodeBackgroundService : BackgroundService {

 cancellationToken.ThrowIfCancellationRequested();
  • if (Logger is not null)
  •  LogStarting(Logger, node.HostName, null);
    
  • LogInformationStarting(logger, node.HostName);

    await base.StartAsync(cancellationToken).ConfigureAwait(false);

  • if (Logger is not null)
  •  LogStarted(Logger, node.HostName, null);
    

+#if IMUNINNODELIFECYCLE

  • if (node is IMuninNodeLifecycle nodeLifecycle)
  •  await nodeLifecycle.WaitForStartedAsync(cancellationToken).ConfigureAwait(false);
    

+#endif
+

  • LogInformationStarted(logger, node.HostName);
    }

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
@@ -113,8 +108,7 @@ public class MuninNodeBackgroundService : BackgroundService {
if (node is null)
throw new ObjectDisposedException(GetType().FullName);

  • if (Logger is not null)
  •  LogStopping(Logger, node.HostName, null);
    
  • LogInformationStopping(logger, node.HostName);

    await base.StopAsync(cancellationToken).ConfigureAwait(false);

@@ -123,9 +117,12 @@ public class MuninNodeBackgroundService : BackgroundService {
// attempt graceful shutdown if possible
if (node is NodeBase stoppableNode)
await stoppableNode.StopAsync(cancellationToken).ConfigureAwait(false);
+#if IMUNINNODELIFECYCLE

  • else if (node is IMuninNodeLifecycle nodeLifecycle)
  •  await nodeLifecycle.WaitForStoppedAsync(cancellationToken).ConfigureAwait(false);
    

+#endif

  • if (Logger is not null)
  •  LogStopped(Logger, node.HostName, null);
    
  • LogInformationStopped(logger, node.HostName);

    if (node is IDisposable disposableNode)
    disposableNode.Dispose();


</div>
</details>

## Notes
<!-- Release notes generated using configuration in .github/release.yml at releases/Smdn.Net.MuninNode.Hosting-3.3.0 -->

## What's Changed
### Notable changes (may include changes not directly related)
* Support AOT compilation by @smdn in https://github.com/smdn/Smdn.Net.MuninNode/pull/46
### Dependencies
* Bump the smdn-workflows-dotnet group with 2 updates by @dependabot[bot] in https://github.com/smdn/Smdn.Net.MuninNode/pull/41
* Bump github/codeql-action from 4.35.1 to 4.35.2 by @dependabot[bot] in https://github.com/smdn/Smdn.Net.MuninNode/pull/44


**Full Changelog**: https://github.com/smdn/Smdn.Net.MuninNode/compare/releases/Smdn.Net.MuninNode.Hosting-3.2.0...releases/Smdn.Net.MuninNode.Hosting-3.3.0