9 rahasia ASP.NET Core

Baru-baru ini, kami meningkatkan ASP.NET Core ke versi 2.1. Salah satu pencipta platform, kolega kami David Fowler, membagikan beberapa fitur berguna yang hanya diketahui sedikit orang. Selain itu, selain 9 fitur rahasia ASP.NET Core, di bawah potongan Anda juga akan menemukan daftar inovasi utama dengan semua tautan yang bermanfaat. Bergabunglah sekarang!



Versi 2.1 dari platform ASP.NET Core terbuka dirilis, dan pengembang David Fowler tweeted beberapa fitur berguna yang hanya sedikit orang tahu tentang. Tentu saja, sekarang platform lebih cepat, tetapi ada juga sejumlah fitur baru dan praktik terbaik yang patut dipertimbangkan secara lebih rinci.

.NET generic host


ASP.NET Core sekarang bekerja dengan model hosting baru. Aplikasi .NET membentuk dan memulai host .

Tuan rumah bertanggung jawab untuk meluncurkan aplikasi dan mengelola siklus hidup mereka. Tujuan dari Generic Host adalah untuk memisahkan pipelining HTTP dari API host web agar dapat membuat lebih banyak skrip pada host. Perpesanan, latar belakang, dan tugas non-HTTP lainnya berfungsi lebih baik dengan fitur Host Generik end-to-end seperti konfigurasi, injeksi ketergantungan (DI), dan pencatatan.

Ini berarti bahwa sekarang untuk skrip tanpa hosting web, tidak hanya ada WebHost, tetapi juga Generik Host. Pada saat yang sama, pekerjaan akan senyaman dengan ASP.NET Core, tetapi Anda juga akan memiliki fitur-fitur baru, seperti DI, pencatatan dan konfigurasi. Kode contoh untuk Generic Host dapat ditemukan di GitHub .

Antarmuka IHOSTEDSERVICE


Dengannya, Anda dapat menjalankan operasi latar belakang yang lama baik di host universal maupun di aplikasi web Anda. ASP.NET Core 2.1 memperkenalkan dukungan untuk kelas dasar BackgroundService, yang sangat memudahkan pembuatan loop asinkron yang panjang. Kode contoh untuk Layanan Hosted juga ada di GitHub .

Buat tugas latar belakang sementara yang sederhana:

public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } 

mudah!

Layanan Windows pada .NET Core


Anda sekarang dapat meng-host ASP.NET Core di dalam layanan Windows! Banyak pengguna telah meminta untuk menambahkan fitur ini. Anda tidak lagi membutuhkan IIS untuk menjadi tuan rumah apa pun yang Anda inginkan. Lihatlah Microsoft.AspNetCore.Hosting.WindowsServices di NuGet dan dokumentasi terperinci tentang hosting aplikasi ASP.NET Core Anda sendiri di Windows sebagai layanan Windows tanpa IIS.

 public static void Main(string[] args) { var pathToExe = Process.GetCurrentProcess().MainModule.FileName; var pathToContentRoot = Path.GetDirectoryName(pathToExe); var host = WebHost.CreateDefaultBuilder(args) .UseContentRoot(pathToContentRoot) .UseStartup<Startup>() .Build(); host.RunAsService(); } 

IHOSTINGSTARTUP - konfigurasi IWEBHOSTBUILDER dengan atribut assembly


Seperti biasa, implementasi yang sederhana dan akurat menggunakan sumber di GitHub.

 [assembly: HostingStartup(typeof(SampleStartups.StartupInjection))] 

Paket SUMBER YANG DIBAGI


Ini akan menarik bagi Anda, pastikan untuk memperhatikan mereka. Anda dapat membuat paket yang digunakan sebagai alat bantu untuk kode sumber yang didistribusikan melalui sumber bersama. Antara satu sama lain, kami menyebutnya "paket sumber bersama". Mereka digunakan dalam ASP.NET Core di mana-mana , ketika sesuatu harus dibagikan, tetapi itu tidak boleh diakses publik melalui API. Maka kode Anda akan digunakan, tetapi tidak akan ada dependensi pada paket akhir.

Mereka digunakan dalam CSPROJ dengan cara ini . Perhatikan atribut PrivateAssets :

 <PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" PrivateAssets="All" Version="" /> <PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" PrivateAssets="All" Version="" /> 

OBYEKTEKETEKODEKSTEKTOR


Jika Anda perlu menggunakan metode dalam tipe melalui refleksi, dan metode ini bisa asinkron, fungsi ObjectMethodExecutor yang dioptimalkan dan fleksibel, yang kami gunakan di mana-mana dalam basis kode inti ASP.NET, akan membantu Anda.

Tim menggunakan kode ini dalam MVC untuk memanggil metode pengontrol Anda. Mereka menggunakan kode ini di SignalR untuk memanggil metode hub. Ini bekerja dengan metode sinkron dan asinkron. Itu juga dapat bekerja dengan objek yang diharapkan khusus dan alur kerja asinkron F #.

SUMBER DAYA SUPPRESS


Metode kecil dan sering diminta. Jika Anda tidak menyukai apa yang ditampilkan setelah memulai driver dotnet ketika Anda meng-host aplikasi web (mencetak informasi yang mengikat), maka Anda dapat menggunakan metode ekstensi SuppressStatusMessages yang baru.

 WebHost.CreateDefaultBuilder(args) .SuppressStatusMessages(true) .UseStartup<Startup>(); 

TAMBAHAN


Dalam versi 2.1, menjadi lebih mudah untuk mengkonfigurasi parameter yang memerlukan layanan. Sebelumnya, Anda harus membuat jenis yang diperoleh menggunakan IConfigureOptions, sekarang Anda bisa melakukan semua ini di ConfigureServices menggunakan AddOptions โ€นTOptionsโ€บ

 public void ConfigureServicdes(IServiceCollection services) { services.AddOptions<MyOptions>() .Configure<IHostingEnvironment>((o,env) => { o.Path = env.WebRootPath; }); } 

IHTTPCONTEXT dengan ADDHTTPCONTEXTACCESSOR


Biasanya tidak perlu mengkonfigurasi IHttpContext, tetapi banyak yang ingin tahu bagaimana melakukan ini , dan beberapa percaya bahwa ini harus dilakukan secara otomatis. Ini tidak dicatat secara default, karena kehadirannya menyebabkan penurunan kinerja. Namun, dalam ASP.NET Core 2.1 , PR ditambahkan untuk metode ekstensi, yang akan memfasilitasi proses jika Anda mau.

 services.AddHttpContextAccessor (); 

Jadi, ASP.NET Core 2.1 siap dirilis .

Fitur baru dalam versi ini:


Lihat daftar perubahan dalam ASP.NET Core 2.1 di ASP.NET Core docs untuk mempelajari lebih lanjut tentang fitur-fitur ini. Daftar lengkap dari semua perubahan dalam versi baru disediakan dalam catatan rilis .

Cobalah! Ikuti kursus QuickStart dan Anda dapat membuat aplikasi web dasar dalam 10 menit.

Source: https://habr.com/ru/post/id416443/


All Articles