ASP.Net Core / MVC 6
383

Microsoft zal in 2016 haar nieuwe .Net platform uitgeven. Het ASP.Net Core met daarbij MVC 6 is een volledige revisie van het web platform. Dit artikel beschrijft een aantal belangrijke veranderingen die het meest opvallen als je een File > New Project uitvoert in Visual Studio waarbij als template MVC 6 / ASP.Net Core wordt gekozen.
Het doel van dit artikel is niet volledig te zijn over alle veranderingen die in deze versie zijn aangebracht. Wel hoopt de auteur de lezer te inspireren met de nieuwe technologie aan de slag te gaan en het pad te bewandelen van platform onafhankelijk en mobiel gericht webapplicaties te ontwikkelen.
Er kan gerust worden gesteld dat deze versie de meest ingrijpende is ooit. Microsoft heeft ervoor gekozen het platform vanaf “green field” opnieuw te bouwen. Hierbij zijn de volgende ontwerp-principes gehanteerd:

  • Het platform moet open zijn voor functionaliteit die door derden wordt ontwikkeld. Daarom is deze versie open source
  • Apps moeten kunnen draaien onafhankelijk van het server platform waarin deze worden gehost. Een gevolg hiervan is dat een MVC app nu te starten is zonder IIS (Express), het heeft alleen de .Net Core assemblies nodig om de functionaliteiten aan te bieden.

Voor ontwikkelaars is Visual Studio verder opengesteld. Via het open source netwerk, zijn frameworks als Bower, Gulp en Grunt, zonder aanpassing en installatie ondersteund. Ontwikkelaars zullen direct ook de andere projectmap structuur en andere bestandsformaten ontdekken. Zo zijn bijvoorbeeld de projectbestanden en configuratiebestanden omgevormd naar Json formaat.

Wat is verdwenen?

  • App_Start en global.asax; deze zijn vervangen door een startup.cs klasse met daarin een implementatie van de ConfigurationBuilder
  • Web.config; deze is vervangen door appsettings.json. Verder in dit artkel wordt configuratie overloading genoemd in het verlengde hiervan
  • Scripts en content mappen; deze zijn nu ondergebracht in de wwwroot virtuele map. Content en scripts worden vaak gebruikt door meerdere apps. Het is nu mogelijk als ontwikkelaar één wwwroot map te hebben met daarin de scripts en styles. Met als gevolg dat deze niet voor elk project gedupliceerd hoeven te worden.

Wat is nieuw of veranderd?

  • _viewimports.cshtml; voorheen werden import statements voor views in de web.config in de Views map geïmplementeerd. Nu moet dat in de _viewimports.cshtml bestand welke in de Views map staat
  • Het is gebruikelijk business modellen en view modellen van elkaar gescheiden te houden. Nu bevat de project template aparte mappen voor klassen die business modellen danwel view modellen zijn. Uiteraard kan je ervoor kiezen deze mappen in aparte assemblies te implementeren om nog meer scheiding en enkelvoudige verantwoordelijkheid te leveren
  • Services; deze versie wordt geleverd met dependency injection als fundamenteel onderdeel. Afhankelijkheden worden in de services map geconfigureerd en via de ConfigurationBuilder in de applicatie geregistreerd.

Deze post zal worden afgesloten met het behandelen van Configuration Overloading. Er wordt een post voorzien als vervolg op deze waarin verder wordt ingegaan op veranderingen in het routing mechanisme van MVC.

Configuration overload
Het is gebruikelijk om voor de verschillende omgevingen binnen een OTAP straat andere instellingen te hebben. Transformations hebben tot dusver hiervoor een oplossing geboden. Transformations zijn aanpassingen aan configuraties afhankelijk van een build instelling die tijdens compileren worden uitgevoerd. In de nieuwe versie, wordt dit eenvoudiger en flexibeler door middel van Configuration Overloading.
Configuration Overloading begint bij het registreren van de verschillende configuratiebestanden. Hiervoor wordt de ConfigurationBuilder gebruikt. Door middel van een omgevingsnaam placeholder kunnen meerdere configuratie bestanden worden geconfigureerd afhankelijk van de naam van de omgeving (development, testing, acceptatie).

14062016_asp1

Onder water wordt automatisch het juiste bestand gekoppeld aan de build omgeving die wordt gecompileerd.
Configuration Overloading wordt vervolgd bij het inlezen van een configuratie Json bestand. Een voorbeeld is hieronder getoond.

14062016_asp2

In een controller kunnen instellingen worden gebruikt door het injecteren van een IOptions object in de constructor.
Een voorbeeld hiervan is in de code snippet hieronder weergegeven.

14062016_asp3

Auteur: Menno Jongerius, Bergler Competence Center, juni 2016