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 ❤️).
DI u 2sxc kodu
(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.
DNN9.4+ DI u modulu
using Microsoft.Extensions.DependencyInjection;
using ToSic.Sxc.Services;
var jsonSvc = DependencyProvider.GetService<IJsonService>();
var json = jsonSvc.ToJson(someObject);
DNN9.5+ DI u skinu, skin objektu
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);
DNN 9.5+ ekstension metode za DI
kako bi koristili DI i na mjestima gdje nemamo dostupan DependencyProvider
HttpContext DependencyInjection Extensions
DNN 7.4.2 + 2sxc 13 DI (hack)
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.