nanoFramework.Hosting 1.0.40

前缀已保留
dotnet add package nanoFramework.Hosting --version 1.0.40                
NuGet\Install-Package nanoFramework.Hosting -Version 1.0.40                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Hosting" Version="1.0.40" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以便引用包。
paket add nanoFramework.Hosting --version 1.0.40                
#r "nuget: nanoFramework.Hosting, 1.0.40"                
#r 指令可以用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中以引用包。
// Install nanoFramework.Hosting as a Cake Addin
#addin nuget:?package=nanoFramework.Hosting&version=1.0.40

// Install nanoFramework.Hosting as a Cake Tool
#tool nuget:?package=nanoFramework.Hosting&version=1.0.40                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


欢迎来到 .NET nanoFramework 通用主机库存储库

.NET nanoFramework 通用主机提供方便的方法来创建具有预配置默认值的 依赖注入(DI) 应用程序容器。

构建状态

组件 构建状态 NuGet 包
nanoFramework.Hosting Build Status NuGet

示例

主机示例

主机单元测试

通用主机

通用主机配置 DI 应用程序容器,并在 DI 容器中提供处理应用程序生命周期的服务。当主机启动时,它在服务容器的主机服务集合中对每个注册的 IHostedService 实现调用 Start()。在应用程序容器中,所有继承自 BackgroundServiceSchedulerServiceIHostedService 对象的 ExecuteAsync() 方法都被调用。

此 API 尽可能镜像官方 .NET 通用主机

using nanoFramework.Hosting;
using nanoFramework.DependencyInjection;

namespace Hosting
{
    public class Program
    {
        public static void Main()
        {
            IHost host = CreateHostBuilder().Build();
            
            // starts application and blocks the main calling thread 
            host.Run();
        }

        public static IHostBuilder CreateHostBuilder() =>
            Host.CreateDefaultBuilder()
                .ConfigureServices(services =>
                {
                    services.AddSingleton(typeof(BackgroundQueue));
                    services.AddHostedService(typeof(SensorService));
                    services.AddHostedService(typeof(DisplayService));
                });
    }
}

IHostedService 接口

当您注册一个 IHostedService 时,宿主生成器将在应用启动时调用 Start() 方法,在应用停止时调用 Stop() 方法。您可以通过在依赖注入容器中使用 ConfigureService() 方法创建多个 IHostedService 的实现,并注册它们。所有托管服务将与应用同时启动和停止。

public class CustomService : IHostedService
{
    public void Start() { }

    public void Stop() { }
}

背景服务基类

提供了一個用于实现长时间运行的 IHostedService 的基类。该类的 ExecuteAsync() 方法将以异步方式运行后台服务。当触发 CancellationRequested 时,您的 ExecuteAsync() 实现应当尽快完成,以便优雅地关闭服务。

public class SensorService : BackgroundService
{
    protected override void ExecuteAsync()
    {
        while (!CancellationRequested)
        {
            // to allow other threads time to process include 
            // at least one millsecond sleep in loop
            Thread.Sleep(1);
        }
    }
}

调度服务基类

提供了一個实现按计划运行的 TimerIHostedServce 的基类。定时器在指定的时间及间隔时触发 ExecuteAsync() 方法。在 Stop() 时禁用定时器,在服务容器被销毁时释放定时器。

public class DisplayService : SchedulerService
{
    // represents a timer control that involks ExecuteAsync at a 
    // specified interval of time repeatedly
    public DisplayService() : base(TimeSpan.FromSeconds(1)) {}

    protected override void ExecuteAsync(object state)
    {   
    }
}

IServiceCollection 扩展方法

扩展 IServiceCollection 是向应用容器添加附加功能的一种相当直接的方法。

public static IServiceCollection AddLogging(this IServiceCollection services, LogLevel level)
{
    if (services == null)
    {
        throw new ArgumentNullException();
    }

    var loggerFactory = new DebugLoggerFactory();
    LogDispatcher.LoggerFactory = loggerFactory;

    var logger = (DebugLogger)loggerFactory.GetCurrentClassLogger();
    logger.MinLogLevel = level;

    // using TryAdd prevents duplicate logging objects if AddLogging() 
    // is added more then once to ConfigureServices
    services.TryAdd(new ServiceDescriptor(typeof(ILogger), logger));
    services.TryAdd(new ServiceDescriptor(typeof(ILoggerFactory), loggerFactory));

    return services;
}

扩展可以像这样进行注册

public static IHostBuilder CreateHostBuilder() =>
    Host.CreateDefaultBuilder()
        .ConfigureServices(services =>
        {
            services.AddLogging(LogLevel.Debug);
            services.AddSingleton(typeof(LoggingService));
        });

并且这样使用

public class LoggingService : IHostedService
{
    private ILogger Logger { get; set; }

    public LoggingService(ILogger logger)
    {
        Logger = logger;
    }

    public void Start()
    {
        Logger.Log(LogLevel.Information, new EventId(10, "Start"), "Logging started", null);
    }

    public void Stop()
    {
        Logger.Log(LogLevel.Information, new EventId(11, "Stop"), "Logging stopped", null);
    }
}

在构建时验证

默认生成器在调试器附加时启用 DI 验证。此检查用于确保容器的所有注册服务都可以实际创建。这在开发期间特别有用,可以快速失败并允许开发者修复问题。可以通过使用 UseDefaultServiceProvider() 方法来修改此设置。

public static IHostBuilder CreateHostBuilder() =>
    Host.CreateDefaultBuilder()
        .UseDefaultServiceProvider(options =>
        {
            options.ValidateOnBuild = false;
        });

反馈和文档

关于文档、提供反馈、问题以及了解如何贡献,请参阅 主分支

加入我们的 Discord 社区 这里

致谢

此项目的贡献者名单可在 CONTRIBUTORS 中找到。

许可协议

nanoFramework 类库采用 MIT 许可协议

行为准则

本项目采纳了贡献者公约定义的行为准则,以阐明我们社区中预期的行为。有关更多信息,请参阅 .NET Foundation 行为准则

.NET Foundation

本项目由 .NET Foundation 支持。

产品 兼容和额外的计算目标框架版本。
.NET Framework net 兼容。
兼容目标框架(s)
包含目标框架(s)(在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (1)

显示对 nanoFramework.Hosting 依赖的前 1 个 NuGet 包

下载
CCSWE.nanoFramework.Hosting

应用程序的宿主和启动基础设施。

GitHub 存储库 (1)

显示对 nanoFramework.Hosting 依赖的前 1 个流行的 GitHub 存储库

存储库 星星
nanoframework/Samples
🍬 由nanoFramework团队在测试、证明概念和其他探索性项目中使用的代码示例
版本 下载 最后更新
1.0.40 1,549 11/10/2023
1.0.38 262 11/6/2023
1.0.25 1,216 12/23/2022
1.0.16 543 10/13/2022
1.0.10 462 8/5/2022
1.0.7 450 7/15/2022