12 Jun 2022 - Matthias Voigt
Dependency Injection (DI) ist ein zentraler Bestandteil moderner .NET-Anwendungen. Mit .NET 6 hat Microsoft die DI-Funktionalität weiter verbessert und vereinfacht. In diesem Artikel werde ich die Grundlagen von Dependency Injection erläutern und einige der neuen Features in .NET 6 vorstellen.
Dependency Injection ist ein Designmuster, das die Abhängigkeiten von Klassen verwaltet. Statt dass eine Klasse ihre Abhängigkeiten selbst erstellt, werden diese von außen bereitgestellt (injected). Dies führt zu besser testbarem und wartbarem Code.
Erstelle ein neues .NET 6-Projekt in Visual Studio:
Registriere deine Services im DI-Container in der Program.cs
-Datei:
var builder = WebApplication.CreateBuilder(args);
// Services hinzufügen
builder.Services.AddTransient<IMyService, MyService>();
builder.Services.AddScoped<IOtherService, OtherService>();
builder.Services.AddSingleton<ILoggerService, LoggerService>();
var app = builder.Build();
// Middleware konfigurieren
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run();
Injiziere die registrierten Services in deine Controller oder anderen Klassen:
public class MyController : ControllerBase
{
private readonly IMyService _myService;
private readonly IOtherService _otherService;
public MyController(IMyService myService, IOtherService otherService)
{
_myService = myService;
_otherService = otherService;
}
[HttpGet]
public IActionResult Get()
{
var result = _myService.DoSomething();
_otherService.Log("Action executed.");
return Ok(result);
}
}
Hier sind Beispielimplementierungen für die registrierten Services:
public interface IMyService
{
string DoSomething();
}
public class MyService : IMyService
{
public string DoSomething()
{
return "Service is doing something.";
}
}
public interface IOtherService
{
void Log(string message);
}
public class OtherService : IOtherService
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
public interface ILoggerService
{
void LogInfo(string info);
}
public class LoggerService : ILoggerService
{
public void LogInfo(string info)
{
Console.WriteLine(info);
}
}
.NET 6 führt Minimal APIs ein, die eine vereinfachte Möglichkeit bieten, APIs mit weniger Boilerplate-Code zu erstellen. Auch hier wird Dependency Injection unterstützt:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddTransient<IMyService, MyService>();
var app = builder.Build();
app.MapGet("/", (IMyService myService) => myService.DoSomething());
app.Run();
Mit .NET 6 kann Logging nahtlos in den DI-Container integriert werden:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddLogging();
builder.Services.AddTransient<IMyService, MyService>();
var app = builder.Build();
app.MapGet("/", (IMyService myService, ILogger<Program> logger) =>
{
logger.LogInformation("Endpoint called.");
return myService.DoSomething();
});
app.Run();
Dependency Injection ist ein mächtiges Werkzeug in der .NET-Entwicklung, das die Strukturierung und Wartung von Code erheblich erleichtert. Mit .NET 6 hat Microsoft die Verwendung von DI weiter vereinfacht und erweitert. Die neuen Features und Verbesserungen machen .NET 6 zu einer hervorragenden Plattform für moderne Anwendungsentwicklung.
Für weitere Details und eine ausführliche Anleitung besuche die [offizielle Microsoft-Dokumentation](https://docs.microsoft.com/en-us/dotnet/core/extensions/dependency-i