.NET · API · Asynchronous

🎯 C# Alapok

Teljes fejlesztői pipeline: .NET SDK telepítés, minták, tesztelés, DI, minimal API és deployment.

.NET 8 Dependency Injection CI/CD

1. .NET SDK telepítés

dotnet --info
# új konzol app
 dotnet new console -n HelloPowerFull
 cd HelloPowerFull
 dotnet run

VS Code-hoz telepítsd a C# Dev Kit kiegészítőt, Visual Studio esetén jelöld be a .NET desktop és ASP.NET workloadokat.

2. Nyelvi alapok

var numbers = new List<int> { 10, 20, 30 };
foreach (var item in numbers)
{
    Console.WriteLine(item);
}

record Player(string Name, int Health);
var sam = new Player("Sam", 120);
Console.WriteLine(sam with { Health = 80 });

Használd a record típusokat immutable DTO-khoz, span/patterns pedig high-perf kódnál segít.

3. OOP és dependency injection

public interface IEmailSender
{
    Task SendAsync(string to, string body);
}

public class SendGridEmailSender : IEmailSender
{
    public Task SendAsync(string to, string body)
        => Console.Out.WriteLineAsync($"Mail to {to}: {body}");
}

builder.Services.AddScoped<IEmailSender, SendGridEmailSender>();

Regisztráld a szolgáltatásokat builder.Services-ben, így tesztelhető és könnyen cserélhető marad.

4. Csomagkezelés és konfiguráció

dotnet add package Serilog.AspNetCore

dotnet user-secrets init
 dotnet user-secrets set "SendGrid:ApiKey" "***"

Használj IOptions<T> mintát: builder.Services.Configure<EmailOptions>(builder.Configuration.GetSection("SendGrid"));

5. Logging + monitoring

builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration
        .ReadFrom.Configuration(context.Configuration)
        .Enrich.WithProperty("service", "powerfull-api")
        .WriteTo.Console();
});

Támogasd a struktúrált logolást (JSON) és küldd Logtail / Seq szerverre. Productionban állíts be UseExceptionHandler().

6. Tesztelés

dotnet new xunit -n PowerFull.Tests

dotnet add PowerFull.Tests reference src/PowerFull/PowerFull.csproj

dotnet test

Mock-olj IEmailSender-t Moq-val vagy NSubstitute-tal; integrációs tesztet készíts WebApplicationFactory<Program> segítségével.

7. Minimal API példa

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/health", () => Results.Ok(new { status = "ok" }));
app.MapPost("/todo", async (Todo todo, IEmailSender sender) =>
{
    await sender.SendAsync("team@powerfull.dev", $"Új todo: {todo.Text}");
    return Results.Created($"/todo/{todo.Id}", todo);
});

app.Run();

Swagger gyorsan hozzáadható: builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();

8. Async/await és adatfolyam

app.MapGet("/metrics", () => GetMetrics());

async IAsyncEnumerable<double> GetMetrics([EnumeratorCancellation] CancellationToken token = default)
{
    var random = new Random();
    while (!token.IsCancellationRequested)
    {
        await Task.Delay(1000, token);
        yield return random.NextDouble();
    }
}

Hosszabb háttérmunkához használj Hosted Service-t (IHostedService) és Channel<T>-t feladat sorokhoz.

9. Architektúra & rétegek

src/
 ├── Application/
 │   └── Commands/
 ├── Domain/
 │   └── Entities/
 └── Infrastructure/
     └── Persistence/
  • Használj MediatR-t a CQRS mintához.
  • Domain eseményeket (IDomainEvent) Channel alapú background queue kezeli.
  • Minden réteg saját projekt (.csproj), így tiszta dependenciák állnak elő.

10. Deployment és megfigyelés

# Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish src/PowerFull.Api/PowerFull.Api.csproj -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "PowerFull.Api.dll"]

GitHub Actions pipeline: dotnet restoredotnet test --collect:"XPlat Code Coverage"dotnet publish → Docker push. Egészítsd ki HealthCheck endpointtal + Serilog OpenTelemetry exporterrel.