Sobes.tech
Middle

Waarvoor wordt Dependency Injection (Dependency Injection) gebruikt?

sobes.tech AI

Antwoord van AI

Dependency Injection (DI) wordt gebruikt om afhankelijkheden tussen componenten van een toepassing te beheren.

Belangrijkste doelen van DI:

  • Vermindering van koppeling: Componenten maken hun afhankelijkheden niet direct, maar ontvangen ze van buitenaf. Dit maakt componenten onafhankelijker en vergemakkelijkt hergebruik.
  • Verbetering van testbaarheid: Het geïsoleerd testen van individuele componenten wordt eenvoudiger, omdat mock-objecten of stubs in plaats van echte afhankelijkheden kunnen worden gebruikt.
  • Verhoogde flexibiliteit en uitbreidbaarheid: Het is gemakkelijker om implementaties van afhankelijkheden te vervangen zonder de code van de componenten die ze gebruiken te wijzigen.
  • Vereenvoudiging van configuratie: Afhankelijkheden kunnen centraal worden geconfigureerd, bijvoorbeeld bij het starten van de toepassing.

Belangrijkste benaderingen van DI:

  • Injectie via constructor (Constructor Injection): Afhankelijkheden worden als parameters aan de constructor doorgegeven. Dit is de meest gebruikelijke en aanbevolen aanpak, omdat het de beschikbaarheid van alle benodigde afhankelijkheden bij het maken van het object garandeert.

    // Afhankelijkheid
    public interface ILogger
    {
        void Log(string message);
    }
    
    // Component met afhankelijkheid
    public class MyService
    {
        private readonly ILogger _logger;
    
        public MyService(ILogger logger) // Injectie via constructor
        {
            _logger = logger;
        }
    
        public void DoSomething()
        {
            _logger.Log("Iets doen.");
        }
    }
    
  • Injectie via eigenschap (Property Injection): Afhankelijkheden worden via openbare eigenschappen ingesteld. Minder aanbevolen, omdat het niet garandeert dat de afhankelijkheid is ingesteld.

    public class MyService
    {
        public ILogger Logger { get; set; } // Injectie via eigenschap
    
        public void DoSomething()
        {
            Logger?.Log("Iets doen."); // nullcontrole
        }
    }
    
  • Injectie via methode (Method Injection): Afhankelijkheden worden als parameters aan een methode doorgegeven. Gebruikt wanneer de afhankelijkheid alleen nodig is om een specifieke methode uit te voeren.

    public class MyService
    {
        public void DoSomething(ILogger logger) // Injectie via methode
        {
            logger.Log("Iets doen.");
        }
    }
    

DI wordt vaak geïmplementeerd met behulp van een DI-container (Inversion of Control Container), die de levenscyclus van objecten beheert en hun afhankelijkheden oplost. Populaire DI-containers in .NET: Microsoft.Extensions.DependencyInjection (ingebouwd), Autofac, Ninject, Castle Windsor.

DI is een kernprincipe voor het bouwen van onderhoudbare, testbare en uitbreidbare toepassingen.