Skip to content

Instantly share code, notes, and snippets.

@codemonkey85
Created November 15, 2023 19:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codemonkey85/39ef6be804af667da1bfbe6513a02bc5 to your computer and use it in GitHub Desktop.
Save codemonkey85/39ef6be804af667da1bfbe6513a02bc5 to your computer and use it in GitHub Desktop.
Showcase of how to do .NET console apps with DI and logging.
using Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var builder = Host.CreateDefaultBuilder(args);
builder
.ConfigureLogging(logging => logging
.ClearProviders()
.AddConsole());
builder
.ConfigureServices(services => services
.AddScoped<LogTest>()
.AddSingleton<IWorkerService, WorkerService>());
var app = builder.Build();
var worker = ActivatorUtilities.CreateInstance<Worker>(app.Services);
worker.WorkerTest($"Hello from {nameof(worker)}!");
var logTest = ActivatorUtilities.CreateInstance<LogTest>(app.Services);
logTest.LogMessage($"Hello from {nameof(logTest)}!");
internal class Worker(IWorkerService workerService)
{
public void WorkerTest(string message) => workerService.WorkerServiceTest(message);
}
internal interface IWorkerService
{
void WorkerServiceTest(string message);
}
internal class WorkerService(LogTest logTest) : IWorkerService
{
public void WorkerServiceTest(string message) => logTest.LoggerTest(message);
}
namespace Logging
{
public partial class LogTest(ILogger<LogTest> logger)
{
// ReSharper disable once ReplaceWithPrimaryConstructorParameter
private readonly ILogger<LogTest> logger = logger;
public void LoggerTest(string message) => LogMessage(message);
[LoggerMessage(Level = LogLevel.Information, Message = "Test log: {message}")]
public partial void LogMessage(string message);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment