Dependency Injection (DI) — bu loyihadagi sinflar o‘rtasida qattiq bog‘lanishni kamaytiradigan dizayn pattern.
Oddiy qilib aytsak:
Bir sinf (masalan, Controller) boshqa sinfni o‘zi yaratib olmaydi, balki tashqaridan (ASP.NET Core container) oladi.
Bu sinflarni testlash, almashtirish va sozlashni osonlashtiradi.
Oddiy misol:
Servis interfeysi
public interface IDatabaseService
{
string GetData();
}
Servis implementatsiyasi
public class SqlDatabaseService : IDatabaseService
{
public string GetData() => "SQL Database dan ma'lumot olindi";
}
Servisni ro‘yxatdan o‘tkazish (Program.cs / Startup.cs)
builder.Services.AddTransient();
Controllerda foydalanish
public class HomeController : Controller
{
private readonly IDatabaseService _databaseService;
// DI orqali konstruktor orqali keladi
public HomeController(IDatabaseService databaseService)
{
_databaseService = databaseService;
}
public IActionResult Index()
{
var data = _databaseService.GetData();
return Content(data);
}
}
➡️ Bunda HomeController qaysi servis ishlatilishini bilmaydi – DI container unga to‘g‘risini beradi.
Agar keyinroq PostgreSqlDatabaseService yozilsa, faqatgina DI ro‘yxatida almashtirish kifoya. Controller kodi o‘zgarmaydi.
Middleware
ASP.NET Core’da har bir so‘rov va javob pipeline orqali o‘tadi.
Pipeline — bu Middleware’lar zanjiri. Har bir middleware:
So‘rovni qabul qiladi.
O‘z vazifasini bajaradi (masalan, loglash, autentifikatsiya, exception handling).
Keyingi middleware’ga uzatadi (await _next(context) orqali).
Oddiy Middleware
public class LoggingMiddleware
{
private readonly RequestDelegate _next;
public LoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
Console.WriteLine($"So'rov keldi: {context.Request.Path} | {DateTime.Now}");
await _next(context); // Keyingi middlewarega o'tadi
Console.WriteLine($"So'rov tugadi: {DateTime.Now}");
}
}
Middleware’ni ulash
var app = builder.Build();
app.UseMiddleware<LoggingMiddleware>(); // Custom middleware
app.UseAuthentication(); // Ichki middleware
app.UseAuthorization();
app.MapControllers();
⚡ Muhim: Middleware’lar tartibi juda muhim. Masalan:
UseAuthentication() Always UseAuthorization() dan oldin turishi kerak.
Exception handling middleware (UseExceptionHandler) boshida turadi.
Umumlashtirib aytganda
AppSettings → konfiguratsiya fayllari (umumiy va muhitga xos).
Dependency Injection → komponentlarni bir-biridan mustaqil qilish.
Middleware → so‘rov va javob jarayonida ishlovchi zanjir.
Top comments (0)