Middle
Kas yra priklausomybių injekcija (DI) ASP.NET Core?
sobes.tech AI
Atsakymas iš AI
Priklausomybių įdiegimas (DI) yra projektavimo šablonas, skirtas valdymo inversijai (IoC), leidžiantis kurti silpnai susietą kodą. ASP.NET Core DI yra įmontuota funkcija, leidžianti lengvai valdyti priklausomybes tarp klasių.
Pagrindiniai DI komponentai ASP.NET Core:
- Paslaugos: Objektai, teikiantys funkcionalumą (pvz., saugyklų klasės, žurnalo paslaugos).
- DI konteineris: Objektas, atsakingas už priklausomybių sprendimą ir paslaugų instancijų kūrimą.
- Paslaugų gyvavimo ciklas: Nustato, kada ir kaip kuriamos paslaugų instancijos:
- Transient: Nauja instancija kuriama kiekvieno prašymo metu.
- Scoped: Viena instancija kuriama kiekvieno prašymo metu (tinklo programoms — kiekvieno HTTP užklausos metu).
- Singleton: Viena instancija kuriama pirmojo prašymo metu ir naudojama viso programos veikimo metu.
DI privalumai:
- Silpnas susiejimas: Klasės priklauso nuo abstrakcijų (sąsajų), o ne nuo konkrečių įgyvendinimų.
- Testavimas: Lengva pakeisti realias priklausomybes "moke" ar "stub" formomis vienetiniame testavime.
- Plėtra: Lengva keisti paslaugų įgyvendinimus be kodo keitimo, kuris jiems priklauso.
- Priklausomybių valdymas: DI konteineris valdo gyvavimo ciklą ir instancijų kūrimą.
Pavyzdys paslaugų registravimui Startup.cs (arba Program.cs .NET 6+):
// ConfigureServices metode
public void ConfigureServices(IServiceCollection services)
{
// Registruoti paslaugą su singleton gyvavimo ciklu
services.AddSingleton<ILogger, EmailLogger>();
// Registruoti paslaugą su scoped gyvavimo ciklu
services.AddScoped<IDataRepository, SqlDataRepository>();
// Registruoti paslaugą su transient gyvavimo ciklu
services.AddTransient<ITransientService, TransientService>();
// Registruoti kontrolerius priklausomybių injekcijai
services.AddControllersWithViews();
}
Priklausomybių įdiegimas į kontrolerio konstruktorių:
```csharp
public class HomeController : Controller
{
private readonly ILogger _logger;
private readonly IDataRepository _repository;
// ASP.NET Core DI automatiškai išsprendžia ir įterpia šias priklausomybes
public HomeController(ILogger logger, IDataRepository repository)
{
_logger = logger;
_repository = repository;
}
// ... kontrolerio veiksmai
}