Dependency Injection u DNN modulima i skinovima

9 vlj 2022

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.

Tonći Vatavuk