Sobes.tech
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 контейнер арқылы енгізіледі, бұл жүзеге асыруларды ауыстыруды және тестілеуді жеңілдетеді.