Co to jest .NET Core?
.NET Core został stworzony przez Microsoft w roku 2016 i jego największymi zaletami są wieloplatformowość, a także open sourcowy kod źródłowy, który można znaleźć na githubie firmy Microsoft. .NET Core jest wieloplatformowy, to znaczy, że działa na dowolnym systemie operacyjnym (windows, linux, mac). Kolejną zaletą jest to, że ma większą wydajność niż zwykły .NET Framework. Aby zainstalować .NET Core, należy przejść na stronę Microsoftu i wybrać odpowiedni system oraz wersję .NET Core'a (https://dotnet.microsoft.com/download). Aktualnie wersja .NET Core to wersja 3.1.
W czym tworzyć oprogramowanie? Jakie IDE?
Jest wiele narzędzi programistycznych, których można użyć do pisania aplikacji w .NET Corze. Na windowsie można tworzyć aplikacje w visual studio, a na linuxie można tworzyć aplikacji na przykład w visual studio code. Aby móc tworzyć takie projekty w Visual Studio, wymagane jest zainstalowanie odpowiednich składników w Instalerze Visual Studio.
Szablony projektów w ASP.NET Core
Tworząc nowy projekt po wybraniu nazwy i ścieżki, oprócz wersji .NET Core'a, domyślnie możemy wybrać kilka szablonów:
-Empty - Zawiera tylko najważniejsze pliki takie jak Program.cs i Startup.cs oraz plik konfiguracyjny appsettings.json. Po uruchomieniu aplikacji wyświetla nam się napis Hello World.
-Api - Dla projektów web api. Ten szablon projektu zawiera podstawowe pliki oraz implementację przykładowego kontrolera REST api.
-Web Application - Dla projektów Razor Pages. Oprócz podstawowych klas zawiera strukturę folderów dla Razor Pages. Dodatkowo zawiera folder wwwroot z plikami statycznymi z podziałem na foldery css, js i lib (bootstrap, jquery, jquery validation oraz jquery validation unobtrusive). Po uruchomieniu odpala się podstawowy szablon.
-Web Application (Model-View-Controller) - Projekty MVC. Oprócz podstawowych klas, zawiera strukturę folderów wymaganą dla projektu MVC wraz z przykładową implementacją. Podobnie jak w Razor Pages dodatkowo zawiera folder wwwroot. Po uruchomieniu otwiera się podstawowy szablon.
-Frameworki javascript (Angular, React itd) - Projekt z podstawowymi klasami, kontrolerem web api oraz podstawowym szablonem na przykład Angulara, z plikami zawartymi w folderze ClientApp.
Jeżeli potrzebujemy jakiś inny szablon to można taki doinstalować, klikając w link na formatce tworzącej nowy projekt w visual studio.
Domyślna autentykacja:
Dodatkowo na tym oknie można wybrać jeszcze sposób autentykacji:
-No Authentication (brak autentykacji).
-Indyvidual User Accounts (podstawowa autentykacja).
-Work or School Accounts (konta używane do logowania się do usług takich jak Office 365).
-Windows Authentication (autentykacja windows).
Oraz możemy wybrać czy chcemy skonfigurować HTTPS, oraz wsparcie dla Dockera.
Struktura projektów:
Po utworzeniu projektu możemy zauważyć kilka ciekawych plików/folderów:
-W wirtualnym folderze Dependencies, możemy znaleźć referencję do bibliotek używanych w projekcie.
-Program.cs - od metody Main w klasie Program startuje nasza aplikacja. Konfiguruje serwer WWW (Kestrel), główny folder treści, integrację z IIS, definiuje klasę Startup oraz buduje i uruchamia skonfigurowany obiekt IWebHost.
-Startup.cs - służy do skonfigurowania i uruchomienia aplikacji. W projekcie mamy wbudowany kontener DI. Można go skonfigurować w metodzie ConfigureServices, a także zmienić (dodać nowy). Można tutaj również skonfigurować usługi. W metodzie Configure jest możliwość skonfigurowania potoku żądań HTTP. Na początek w metodzie Configure jest skonfigurowana reakcja na wyjątki w aplikacji. W zależności od tego, czy jest to środowisko deweloperskie, czy produkcyjne. Udostępnianie przez serwer WWW plików statycznych zawartych w wwwroot, a także domyślny routing.
-appsettings.json - zamiast web.configu (ASP.NET MVC) w .NET Core jest właśnie plik konfiguracyjny appsetting.json, który zastąpił składnie XML na format JSON.
Razor Pages
Został wprowadzony w ASP.NET Core 2.0, w celu uproszczenia pisania aplikacji webowych. Na pierwszy rzut oka, składnia bardzo przypomina MVC. Widoki Razor Pages rozpoczynają się od @page i sprawia to, że plik jest akcją MVC i obsługuje żądania bezpośrednio, bez przechodzenia przez kontroler. Pliki w folderze Pages dzielą się na dwa, po pierwsze pliki stron Razora (są to pliki z rozszerzeniem cshtml) oraz klasy (z rozszerzeniem cs).
Blazor
Został wprowadzony w ASP.NET Core 3.0. Dzięki niemu możemy pisać aplikacje po stronie klienta przy użyciu platformy .NET, to znaczy, zamiast javascript możemy użyć C#. Podobnie jak w Razor Pages, w Blazorze żądania są wykonywane z pominięciem kontrolerów. Widoki mają rozszerzenie razor. Aby stworzyć w Visual Studio taki projekt, należy wybrać typ projektu Blazor App.
Wstrzykiwanie zależności
ASP.NET Core ma wbudowaną platformę wstrzykiwania zależności (DI). Jednym ze sposobów uzyskania wystąpienia usługi w klasie, jest utworzenie konstruktora z parametrem wymaganego typu. Oczywiście można, zamiast wbudowanego wstrzykiwania zależności użyć dowolnego innego kontenera DI.
Logowanie
ASP.NET Core posiada również wbudowany mechanizm do logowania danych. Jest możliwość zastąpienia go dowolnym innym logerem.
Strona wyjątków dla deweloperów
W Startup.cs dzięki IApplicationBuilder.IsDevelopment można wyświetlać inne strony błędów w zależności od środowiska. Na przykład, jeżeli mamy doczynienia ze środowiskiem deweloperskim to możemy ustawić, tak aby wyświetlały się szczegółowe informacje o błędzie, a jeżeli środowisko produkcyjne to statyczną stronę z ogólną informacją o błędzie.
PODSUMOWANIE:
Jak widzisz ASP.NET Core ma wiele możliwości, możesz tworzyć różne typy projektów, uruchamiać na różnych platformach, a także jest bardziej wydajny niż zwykły .NET. Moim zdaniem, niezwykle ciekawie zapowiada się Blazor - myślę, że warto się nim zainteresować. Ten artykuł, był tylko krótkim wprowadzeniem. Jeżeli interesuje Cię więcej informacji na temat .NET Core, lub ogólnie aplikacji pisanych w .NET, to zostaw wiadomość w komentarzu lub napisz do mnie maila.
Poprzedni artykuł - Czy Testować Jednostkowo Metody Prywatne - Przykłady w C#.
Następny artykuł - Co to jest dziedziczenie w programowaniu obiektowym?.