Sobes.tech
Middle

Ի՞նչ նպատակով են օգտագործվում ծառայությունների կոնֆիգուրացիայի մեթոդները C#-ում։

sobes.tech AI

Պատասխան AI-ից

Նախագծման կախվածությունների կառավարման կոնտեյներով (Dependency Injection container) գրանցման համար: Սա թույլ է տալիս ծրագրային ենթակառուցվածքին կառավարել սերվիսների օրինակների ստեղծումը և ներդնել դրանք այնտեղ, որտեղ անհրաժեշտ է:

Հիմնական նպատակները:

  • Կառավարում կյանքի ցիկլը: Սերվիսի օրինակի գոյության ժամանակը որոշելը (Singleton, Scoped, Transient):
  • Աբստրակցիոնային ճարտարապետություն: Կոմպոնենտների միջև կապի նվազեցում՝ օգտագործելով աբստրակցիաներ (ինտերֆեյսներ):
  • Թեստավորման հնարավորություն: Հեշտ փոխարինել սերվիսների իրականացմանը մոդուլային թեստավորման համար:
  • Կոնֆիգուրացիոնություն: Հնարավորություն ունենալ մեկ իրականացման փոխարեն փոխարինել մյուսով՝ առանց հաճախորդային կոդի փոփոխության:

ASP.NET Core-ում սերվիսների գրանցման օրինակ:

// Startup.cs կամ Program.cs՝ Minimal APIs-ում
public void ConfigureServices(IServiceCollection services)
{
    // Սերվիսի գրանցում՝ Singleton կյանքի ցիկլով
    services.AddSingleton<ISingletonService, SingletonService>();

    // Սերվիսի գրանցում՝ Scoped կյանքի ցիկլով
    services.AddScoped<IScopedService, ScopedService>();

    // Սերվիսի գրանցում՝ Transient կյանքի ցիկլով
    services.AddTransient<ITransientService, TransientService>();

    // MVC և այլ ստանդարտ սերվիսների գրանցում
    services.AddControllersWithViews();
}

Սերվիսների կյանքի ցիկլերը:

Կյանքի ցիկլ Նկարագրություն Օրինակների քանակը մեկ հարցումում (HTTP)
Singleton Մի օրինակ՝ ողջ ծրագրի կյանքի ընթացքում Մեկ
Scoped Մի օրինակ՝ հարցման (HTTP) կյանքի ընթացքում Մեկ
Transient Նոր օրինակ՝ յուրաքանչյուր հարցում սերվիսի համար Բազմաթիվ (յուրաքանչյուր ներդրման ժամանակ)