Note: This is the published version of my free, weekly newsletter: The .NET Stacks—originally sent to subscribers on November 16, 2020. Subscribe at the bottom of this post to get the content right away!
Happy Monday, everybody! I hope you have a wonderful week. We’ll be covering a few things this morning:
- .NET 5 has arrived
- Dependency injection gets a community review
- Last week in .NET world
🥳.NET 5 has arrived
Well, we made it: .NET 5 is officially here. This week, Microsoft showed off their hard work during three busy days of .NET Conf—and with it, some swag including my new default Visual Studio Code theme. I’m starting to wonder if overhyping Blazor is possible—as great as it is, I wish Microsoft would dial it back a bit.
Anyway: we’ve spent the better part of six months discussing all the updates (like, my favorite things, Blazor’s readiness, the support model, what’s happening to .NET Standard, EF Core 5, app trimming, System.Text.Json vs. Newtonsoft, and so much more).
I know you’re here for the .NET Conf links—so let me be of service. You can see all the talks from this YouTube playlist, but the highlights are below.
From the Microsoft perspective, we had the following sessions:
- The Scotts welcome you to .NET 5.
- Mads Torgersen and Dustin Campbell talk about C# 9, and Phillip Carter introduces F# 5.
- Immo Landwerth and Phillip Carter port projects to .NET 5.
- Jeremy Likness and Shay Rojansky talk about Entity Framework Core 5.
- James Newton-King discusses high performance with gRPC.
- Steve Sanderson and Safia Abdalla talk about Blazor in .NET 5, and Daniel Roth and Javier Calvarro talk about integrating it with ASP.NET Core.
- Rich Lander, Jan Kotas, and Stephen Toub dive deep on the .NET 5 runtime.
- Scott Hanselman updates his site to .NET 5, live.
- Chris Sfanos and Dmitry Lyalin provide a .NET desktop development update.
- Claire Novotny and Layla Porter provide a .NET Foundation update.
- Maddy Leger and David Ortinau roll out Xamarin.Forms 5.
- Glenn Condrong and David Fowler talk about microservices with Project Tye.
- Kathleen Dollard and Rainer Sigwald get to know the .NET 5 SDK.
- Leslie Richardson talks about debugging in Visual Studio with Mark Downie.
- Robert Green and Brady Gaster talk about HTTP API development with .NET, Azure, and OpenAPI.
- Jon Galloway talks with David Wengier about C# source generators.
- Eilon Lipton shows off Blazor Mobile Bindings.
From the community:
- Carl Franklin talks about application state in Blazor apps.
- Ed Charbeneau talks about Blazor stability testing tools.
- Vaibhav Gujral talks about Azure Static Web Apps.
- Veronika Kolesnikova talks about ML.NET, Azure, and Xamarin.
- Menaka Basker architects cloud native apps in Azure with .NET Core.
- Bryan Hogan discusses Polly.
- Lizzy Gallagher discusses .NET Core migration at enterprise scale.
- Nico Paez talks about testing with extension methods and fluent interfaces.
- Zaid Ajaj builds React applications with F#.
- Eduard Keilholz gets real-time insights from serverless solutions.
- Luis Beltran discusses AI enrichment with Azure Cognitive Search.
- Florian Rappl talks about microfrontends with Blazor.
💉 Dependency injection gets a community review
During the day job, I’ve been teaching infrastructure engineers how to code in C#. With plenty of experience with scripting languages like PowerShell, explaining variables, functions, and loops isn’t really a big deal. Next week, however, I’ll have to discuss dependency injection and I’m not looking forward to it. That’s not because they won’t understand it, because they’re very smart and they definitely will (eventually). It’s because it’s a head-spinning topic to beginners but is essential to learn because ASP.NET Core is centered around it.
If you aren’t familiar with dependency injection, it’s a software design pattern that helps manage dependencies towards abstractions and not lower-level implementation details. New is glue, after all. In ASP.NET Core, we use interfaces (or base classes) to abstract dependencies away, and “register” dependencies in a service container (most commonly IServiceProvider in the ConfigureServices method in a project’s Startup class). This allows us to “inject” services (or groups of services) only when we need them.
Right on cue, this week’s edition of .NET Twitter Drama included the discussion of a Hacker News article criticizing the ASP.NET Core DI practice as overkill. The article mirrors a lot of HN: .NET rants with some valuable feedback nested inside.
In my experience, DI in general is a difficult concept to learn initially but sets you up for success for maintaining loose coupling and testability as your project matures. However, the initial ceremony can drive people away from ASP.NET Core as developers can view it as overkill if they think their project will never need it.
I do think the conversation this week helped folks understand that working with settings is very ceremonial and can lead to confusion (just look at the options pattern). This might foster .NET team discussions about doc updates and how to provide a better experience when working with configuration. A boy can dream, anyway.
🌎 Last week in the .NET world
🔥 The Top 3
- Maybe you’ve heard: .NET 5 is here. Richard Lander has the announcement, Daniel Roth discusses ASP.NET Core 5, and Jeremy Likness covers EF Core 5.
- From the language side, Mads Torgersen provides an update on C# 9 and Phillip Carter announces F# 5.
- Ed Charbeneau writes about Blazor stability testing tools.
- For Visual Studio: Jacqueline Widdis writes about the Visual Studio 2019 v16.8 and v16.9 Preview 1 releases, Pratik Nadagouda writes about the release of the Git experience in Visual Studio, and Jon Galloway rolls out Visual Studio 2019 for Mac version 8.8.
- Peter Groenewegen provides an update on IntelliCode suggestions.
- Joey Aiello introduces PowerShell 7.1.
- Angela Zhang announces the C#/WinRT Version 1.0 with .NET 5 GA.
- Rahul Bhandari provides the .NET Core November 2020 updates, and Tara Overfield discusses the .NET Framework 2020 security updates.
- Filip Woj releases dotnet-script 1.0.0.
- Kayla Cinnamon walks through Windows Terminal Preview 1.5.
- Uno discusses .NET 5 and C# 9 support in Uno Platform 3.2.
📅 Community and events
With .NET Conf, no community standups so a light section except: The .NET Docs Show codes a drone with Bruno Capuano.
🚀 .NET 5
- David Hayden writes about EF Core 5 many-to-many relationships, ASP.NET Core 5 model binding to C# 9 record types, and OpenAPI and Swagger UI in ASP.NET Core 5 Web API.
- Michael MacDonald asks: does .NET 5 deliver?
- Alex Yakunin talks about his performance gains in .NET 5 when migrating his Fusion project.
- Mitchel Sellers talks about what to do now that .NET 5 is here.
- Miguel Bernard sums up the .NET 5 breaking changes.
- Andrea Chiarelli writes about five things you should know about .NET 5.
- David Grace answers five questions about .NET 5.
😎 ASP.NET Core / Blazor
- Marinko Spasojevic writes about global HTTP error handling in Blazor WebAssembly.
- Jon Hilton asks: is it possible to render components “dynamically” in Blazor?
- Marinko Spasojevic writes about lazy loading in Blazor WebAssembly.
- Khalid Abuhakmeh implements a webhook framework in ASP.NET Core.
- Mike Brind writes about implementing a custom model binder in Razor Pages.
- Ricardo Peres talks about possible pitfalls with localization in ASP.NET Core.
- Henrick Tissink talks about path versioning for ASP.NET Core APIs.
- Imar Spaanjaars implements health checks in ASP.NET Core.
⛅ The cloud
- Dominique St-Amand migrates to the new C# Azure KeyVault SDK libraries.
- At CodeMaze, using Azure WebJobs in .NET apps.
- Josh Hurley runs through .NET 5 on AWS.
- Christopher Christou explores .NET 5 with the AWS Toolkit for Visual Studio.
- Justin Yoo works with Azure Functions via GitHub Actions with no publish profile.
- Damien Bowden implements a web app and an ASP.NET Core secure API using Azure AD.
- Miguel Bernard writes about the unknown goodies for C# 9.
- Khalid Abuhakmeh writes about ExceptionDispatchInfo and capturing exceptions.
- Carmel Eve writes about the Facade pattern in C#.
- David Hayden writes about top-level programs in C# 9.
- Dominique St-Amand talks about handling being throttled by an API in C#.
- Claudio Bernasconi talks about C# 9 record types.
- Oren Eini profiles to investigate performance regression and also writes about the cost of serializing large object graphs in JSON.
- Bohdan Stupak uses Span of T in F#.
- Mike Melanson writes about when to choose F# over Rust.
- Ian Bebbington writes about cross-platform app authentication with Azure AD B2C and the Uno Platform.
- Steve Smith generates GitHub Actions from dotnet new templates.
- Khalid Abuhakmeh dives into NuGet history for fun and community insights.
- Iryne Somera discusses the best 5 tools for .NET monitoring.
- Paul Michaels debugs a failed API request with Fiddler.
- Idan Shatz discusses the different ways to debug .NET apps running as Docker microservices.
- Adam Bertram compares file formats between XML, YAML, JSON, and HCL.
- Delpin Susai Raj writes about a custom TitleView.
- Brandon Minnick uses immutable objects with SQLite-Net.
- Leomaris Reyes writes about a phone dialer and sending emails and SMS.
- Damien Tohin Doumer Kake works on JWT social auth with ASP.NET Core and Xamarin Essentials.
- David Britch displays SVGs as TabbedPage tab icons.
- The Xamarin Show talks about .NET 5.
- The .NET Rocks podcast talks with Billy Hollis about the ROI of good UX design.
- The Developers Road podcast talks with Chris Woodruff about building your skillset, and also about building community with Beth Massi.
- The 6-Figure Developer podcast talks about self-care in COVID times.
- At Technology and Friends, David Giard talks with Scott Hanselman about productivity.
- Derek Comartin talks about C# performance with Steve Gordon.
- Jeff Fritz streams about SDK, project types, and testing.
- The ASP.NET Monsters walks through Azure SQL Elastic Query.
- Data Exposed discusses Azure SQL database deployments and also talks about Azure Arc Enabled SQL Managed Instance.
- Mads Kristensen walks through the new Git experience in Visual Studio 2019.
- A new Azure Enablement video series talks about architecting successful workloads on Azure.