configuring-console-app-di
0
总安装量
1
周安装量
安装命令
npx skills add https://github.com/christian289/dotnet-with-claudecode --skill configuring-console-app-di
Agent 安装分布
amp
1
cline
1
opencode
1
cursor
1
continue
1
kimi-cli
1
Skill 文档
Console Application DI Pattern
A guide for implementing dependency injection using GenericHost in .NET Console Application.
1. Required NuGet Package
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.*" />
</ItemGroup>
2. Basic Implementation
2.1 Program.cs
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
services.AddSingleton<IMyService, MyService>();
services.AddSingleton<App>();
})
.Build();
var app = host.Services.GetRequiredService<App>();
await app.RunAsync();
2.2 App.cs
namespace MyApp;
public sealed class App(IMyService myService)
{
private readonly IMyService _myService = myService;
public async Task RunAsync()
{
await _myService.DoWorkAsync();
}
}
3. Service Lifetime
| Lifetime | Description | Use When |
|---|---|---|
Singleton |
Single instance for entire app | Stateless services |
Scoped |
Single instance per request | DbContext |
Transient |
New instance per injection | Lightweight services |
4. Configuration Integration
var host = Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: true);
})
.ConfigureServices((context, services) =>
{
services.Configure<AppSettings>(
context.Configuration.GetSection("AppSettings"));
services.AddSingleton<App>();
})
.Build();
5. Logging Integration
public sealed class App(ILogger<App> logger)
{
public Task RunAsync()
{
logger.LogInformation("Application started");
return Task.CompletedTask;
}
}
6. Important Notes
â ï¸ Avoid Service Locator Pattern
// â Bad example
public sealed class BadService(IServiceProvider provider)
{
public void DoWork()
{
var service = provider.GetRequiredService<IMyService>();
}
}
// â
Good example
public sealed class GoodService(IMyService myService)
{
public void DoWork() { }
}
â ï¸ Captive Dependency
- Singleton should not inject Scoped/Transient dependencies