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 | Նոր օրինակ՝ յուրաքանչյուր հարցում սերվիսի համար | Բազմաթիվ (յուրաքանչյուր ներդրման ժամանակ) |