Witajcie,
Zacząłem ogarniać sobie owiane grozą i płaczem wstrzykiwanie zależności. Działam z książką "ASP .NET Core MVC 2. Zaawansowane programowanie" Adama Freemana (swoją drogą świetna pozycja, polecam). I o ile bez problemu zrozumiałem sens i działanie wstrzykiwania zależności, jeżeli przygotowujemy implementację interfejsu, czy też łańcuchy zależności o tyle jak napotkałem wstrzykiwanie zależności dla konkretnego typu nie bardzo jestem w stanie znaleźć w czym niby to ma być lepsze od utworzenia tego "normalnie". Gdyby mi ktoś to "po chłopsku" potrafił wytłumaczyć byłbym wdzięczny. Poniżej kody i wdrożenie w temat z książki:
Tworzymy w modelach taki oto plik ProductTotalizer.cs:
using System.Linq;
namespace DependencyInjection.Models
{
public class ProductTotalizer
{
public ProductTotalizer(IRepository repo) => Repository = repo;
public IRepository Repository { get; set; }
public decimal Total => Repository.Products.Sum(p => p.Price);
}
}
Następnie w kontrolerze Home tworzymy zależność od ProductTotalizer:
using Microsoft.AspNetCore.Mvc;
using DependencyInjection.Models;
namespace DependencyInjection.Controllers
{
public class HomeController : Controller
{
private IRepository repository;
private ProductTotalizer totalizer;
public HomeController(IRepository repo, ProductTotalizer total)
{
repository = repo;
totalizer = total;
}
public ViewResult Index()
{
ViewBag.Total = totalizer.Total;
return View(repository.Products);
}
}
}
Na koniec już tylko w Startup'ie dodajemy AddTransient:
services.AddTransient<ProductTotalizer>();
Działanie tego kodu czaję, rozumiem co jest gdzie, dlaczego itp. Tylko nie czaję co daje mi zrobienie tego w ten sposób, zamiast po prostu umieścić tą klasę w kontrolerze.