Senior
Қызметтерде келісімшарттарды (интерфейстерді) қалай пайдалану керек? C#-та тәуелділікті енгізу.
sobes.tech AI
AI-дан жауап
C# тілінде Dependency Injection (DI) жүзеге асыру үшін әдетте интерфейстер түрінде контракттарды пайдаланады, бұл сервистің жүзеге асырылуын оның қолданылуынан бөлуге мүмкіндік береді. Бұл кодтың тестілеуін, кеңейтілуін және қолдауын жақсартады.
Мысал:
// Интерфейс (контракт)
public interface ILogger
{
void Log(string message);
}
// Интерфейс жүзеге асыру
public class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
// ILogger-ге тәуелді сервис
public class UserService
{
private readonly ILogger _logger;
// Тәуелділікті конструктор арқылы енгізу
public UserService(ILogger logger)
{
_logger = logger;
}
public void CreateUser(string name)
{
// Пайдаланушыны жасау логикасы
_logger.Log($"User {name} created.");
}
}
// DI контейнерімен қолдану (мысалы, Microsoft.Extensions.DependencyInjection)
var services = new ServiceCollection();
services.AddTransient<ILogger, ConsoleLogger>();
services.AddTransient<UserService>();
var provider = services.BuildServiceProvider();
var userService = provider.GetService<UserService>();
userService.CreateUser("Alice");
Осылайша, сервистер абстракциялардан (интерфейстерден) тәуелді болады, ал нақты жүзеге асырулар DI контейнер арқылы енгізіледі, бұл жүзеге асыруларды ауыстыруды және тестілеуді жеңілдетеді.