nanoFramework.Hosting 1.0.40
前缀已保留
dotnet add package nanoFramework.Hosting --version 1.0.40
NuGet\Install-Package nanoFramework.Hosting -Version 1.0.40
<PackageReference Include="nanoFramework.Hosting" Version="1.0.40" />
paket add nanoFramework.Hosting --version 1.0.40
#r "nuget: nanoFramework.Hosting, 1.0.40"
// 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
欢迎来到 .NET nanoFramework 通用主机库存储库
.NET nanoFramework 通用主机提供方便的方法来创建具有预配置默认值的 依赖注入(DI) 应用程序容器。
构建状态
组件 | 构建状态 | NuGet 包 |
---|---|---|
nanoFramework.Hosting |
示例
通用主机
通用主机配置 DI 应用程序容器,并在 DI 容器中提供处理应用程序生命周期的服务。当主机启动时,它在服务容器的主机服务集合中对每个注册的 IHostedService
实现调用 Start()
。在应用程序容器中,所有继承自 BackgroundService
或 SchedulerService
的 IHostedService
对象的 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);
}
}
}
调度服务基类
提供了一個实现按计划运行的 Timer 的 IHostedServce
的基类。定时器在指定的时间及间隔时触发 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 兼容。 |
-
- nanoFramework.DependencyInjection >= 1.1.3
NuGet 包 (1)
显示对 nanoFramework.Hosting 依赖的前 1 个 NuGet 包
包 | 下载 |
---|---|
CCSWE.nanoFramework.Hosting
应用程序的宿主和启动基础设施。 |
GitHub 存储库 (1)
显示对 nanoFramework.Hosting 依赖的前 1 个流行的 GitHub 存储库
存储库 | 星星 |
---|---|
nanoframework/Samples
🍬 由nanoFramework团队在测试、证明概念和其他探索性项目中使用的代码示例
|