Middle+
Koji se pristupi koriste za poštovanje principa inverzije zavisnosti?
sobes.tech АИ
Одговор од АИ
Princip inverzije zavisnosti (Dependency Inversion Principle, DIP) kaže da:
- Moduli visokog nivoa ne bi trebalo da zavise direktno od modula niskog nivoa.
- Oba tipa modula treba da zavise od apstrakcija (npr. interfejsa).
- Apstrakcije ne bi trebalo da zavise od detalja, detalji treba da zavise od apstrakcija.
Da bi se ovaj princip poštovao u C#, primenjuju se sledeći pristupi:
-
Korišćenje interfejsa i apstraktnih klasa
- Zavisnosti se deklaršu putem interfejsa, a ne putem konkretnih implementacija.
-
Injektovanje zavisnosti (Dependency Injection, DI)
- Zavisnosti se prosleđuju klasi spolja (kroz konstruktor, svojstva ili metode), a ne kreiraju unutar nje.
- Ovo olakšava zamenu implementacija i pojednostavljuje testiranje.
-
Inverzija kontrole (Inversion of Control, IoC)
- Kontrola nad kreiranjem i povezivanjem objekata se prenosi na eksterni kontejner ili okvir.
-
Korišćenje DI kontejnera
- Na primer, Microsoft.Extensions.DependencyInjection, Autofac, Ninject i dr.
- Oni upravljaju životnim ciklusom i rešavanjem zavisnosti.
Primer injektovanja zavisnosti putem konstruktora:
public interface ILogger
{
void Log(string message);
}
public class ConsoleLogger : ILogger
{
public void Log(string message) => Console.WriteLine(message);
}
public class UserService
{
private readonly ILogger _logger;
public UserService(ILogger logger)
{
_logger = logger;
}
public void CreateUser(string name)
{
// logika kreiranja korisnika
_logger.Log($"Korisnik {name} je kreiran.");
}
}
U ovom primeru, UserService zavisi od apstrakcije ILogger, a konkretna implementacija ConsoleLogger se prosleđuje spolja, što je u skladu sa principom inverzije zavisnosti.