Benefiti primjene Dependency injectiona u našem .NET kodu su višestruki. Kod je čistiji, unit testiranje je lakše, omogućava decoupling, lakše je održavanje koda...
Korištenje DI u DNN developmentu prilikom razvoja DNN ekstenzija, modula, skinova je moguće i preferirano. Osobito je jednostavno prilikom razvoja DNN riješenja korištenjem 2sxc🎉 (a to je uvijek i svugdje).
Kompletne primjere c# koda kako koristiti DI u DNN Modulima i Skinovima potražite u 2sxc dokumentaciji, a osnove u postu Andrew Hoefling: DNN Dependency Injection.
Donji primjeri koda su preuzeti iz 2sxc dokumentacije👌a pripremio ih je Daniel Mettler aka iJungleboy 👍(hvala ❤️).
(razor cshtml templates, webapi, c#)
2sxc DI je dostupan uvijek i svugdje . Može se koristiti i u DNN scheduled jobovima (kada nemamo HttpContext.Current). Pogledajte dokumentaciju.
using ToSic.Sxc.Services; var page = GetService<IPageService>(); page.AddOpenGraph("video", "https://2sxc.org/videos/intro.mp4");
U 2sxc dokumentaciji pročitajte više o GetService ili o GetService API-u.
using Microsoft.Extensions.DependencyInjection; using ToSic.Sxc.Services; var jsonSvc = DependencyProvider.GetService<IJsonService>(); var json = jsonSvc.ToJson(someObject);
ili bilo gdje drugo gdje imate HttpContext.Current
using DotNetNuke.Common.Extensions; using System; using Microsoft.Extensions.DependencyInjection; using ToSic.Sxc.Services; var sp = HttpContext.Current.GetScope().ServiceProvider; var jsonSvc = sp.GetService<IJsonService>(); var json = jsonSvc.ToJson(someObject);
kako bi koristili DI i na mjestima gdje nemamo dostupan DependencyProvider
HttpContext DependencyInjection Extensions
Ugrađeni 2sxc DI možemo indirektno koristiti iz vanjskog c# koda, bilo gdje dok imamo HttpContext.Current, dakle i u starim verzijama DNN-a tipa DNN 7.4.2 gdje nemamo ugrađeni DNN DI.
IServiceProvider ServiceProvider = ((IServiceScope)HttpContextSource.Current.Items[typeof(IServiceScope)]).ServiceProvider;
Ovo koristite samo ako baš morate i u največoj nuždi jer je direktno korištenje 2sxc DI API-a uvijek bolji i pouzdan izbor.