Skip to main content

[.net core template project]Hosted Service

· One min read
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.2.4" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.2.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.0.0" />
</ItemGroup>

</Project>

or SDK.Worker

<Project Sdk="Microsoft.NET.Sdk.Worker">

{
"Logging": {
"LogLevel": {
"Default": "Warning",
"System": "Information",
"Microsoft": "Information"
}
},
"Serilog": {
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Elasticsearch",
"Args": {
"nodeUris": "http://127.0.0.1:9200",
"indexFormat": "hostedservice-{0:yyyy.MM.dd}",
"autoRegisterTemplate": true
}
}
]
},
"ConnectionStrings": {
"Redis": "127.0.0.1:6379"
}
}
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using System.Collections.Generic;
using System.IO;

namespace Example
{
class Program
{
static void Main()
{
var host = new HostBuilder()
.ConfigureHostConfiguration(configurationBuilder =>
{
configurationBuilder.SetBasePath(Directory.GetCurrentDirectory());
configurationBuilder.AddEnvironmentVariables("ASPNETCORE_");
})
.ConfigureAppConfiguration((hostBuilderContext, configurationBuilder) =>
{
configurationBuilder.AddJsonFile("appsettings.json", true);
configurationBuilder.AddJsonFile($"appsettings.{hostBuilderContext.HostingEnvironment.EnvironmentName}.json", true);
configurationBuilder.AddEnvironmentVariables();
})
.ConfigureServices((hostBuilderContext, services) =>
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostBuilderContext.Configuration)
.CreateLogger();

services.AddLogging(config =>
{
config.AddConsole();
config.AddSerilog();
});

services.Configure<ConnectionStrings>(hostBuilderContext.Configuration.GetSection("ConnectionStrings"));
services.AddSingleton<IRedisLib, RedisLib>();
services.AddHostedService<TaskProcessor>();
})
.ConfigureLogging((hostBuilderContext, loggingBuilder) =>
{
loggingBuilder.AddConfiguration(hostBuilderContext.Configuration.GetSection("Logging"));
loggingBuilder.AddSerilog();

if (hostBuilderContext.HostingEnvironment.EnvironmentName == EnvironmentName.Development)
{
loggingBuilder.AddDebug();
}

loggingBuilder.AddConsole();
})
.UseConsoleLifetime()
.Build();

host.Run();
}
}
}
ClustrMaps