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 restore → dotnet test --collect:"XPlat Code Coverage" → dotnet publish → Docker push. Egészítsd ki HealthCheck endpointtal + Serilog OpenTelemetry exporterrel.