01|Hvad er Dependency Injection?
Dependency Injection betyder, at en klasse får de ting den skal bruge udefra, i stedet for selv at oprette dem.
Det gør koden mindre låst, nemmere at teste og lettere at ændre senere.
02|Problemet uden DI
Her laver UserService selv en EmailService. Det virker, men klassen bliver hårdt bundet til lige præcis den implementation.
cs · 16 lines
1 2public class UserService3{4 private readonly EmailService _emailService;5 6 public UserService()7 {8 _emailService = new EmailService();9 }10 11 public void CreateUser(string email)12 {13 _emailService.SendWelcomeEmail(email);14 }15}16 03|Løsningen med DI
Her får UserService sin EmailService gennem constructoren. Klassen bestemmer ikke selv, hvordan afhængigheden bliver lavet.
cs · 16 lines
1 2public class UserService3{4 private readonly EmailService _emailService;5 6 public UserService(EmailService emailService)7 {8 _emailService = emailService;9 }10 11 public void CreateUser(string email)12 {13 _emailService.SendWelcomeEmail(email);14 }15}16 04|Med interface
Ofte bruger man et interface, så servicen ikke er låst til én bestemt klasse.
cs · 24 lines
1 2public interface IEmailService3{4 void SendWelcomeEmail(string email);5}6 7public class EmailService : IEmailService8{9 public void SendWelcomeEmail(string email)10 {11 Console.WriteLine("Welcome " + email);12 }13}14 15public class UserService16{17 private readonly IEmailService _emailService;18 19 public UserService(IEmailService emailService)20 {21 _emailService = emailService;22 }23}24 05|Registrering i ASP.NET Core
I ASP.NET Core registrerer man services i Program.cs. Derefter kan frameworket selv give dem videre til controllers eller andre services.
cs · 4 lines
1 2builder.Services.AddScoped<IEmailService, EmailService>();3builder.Services.AddScoped<UserService>();4 06|Sammenhæng med Separation of Concerns
Dependency Injection bruges ofte sammen med Separation of Concerns.
SoC handler om at dele ansvar op i mindre dele. DI gør det nemmere at koble de dele sammen uden at klasserne bliver hårdt bundet til hinanden.
07|Kort huskeregel
Uden DI siger klassen: “Jeg laver selv det jeg skal bruge”. Med DI siger klassen: “Giv mig det jeg skal bruge”.