<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/sources/wearedotnet/best-of/2026/04" -->

---
title: Best We Are .NET posts — April 2026 | daily.dev
description: The most upvoted We Are .NET posts from April 2026, curated by the daily.dev community.
canonical: https://daily.dev/sources/wearedotnet/best-of/2026/04
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:url: https://daily.dev/sources/wearedotnet/best-of/2026/04
og:type: website
og:site_name: daily.dev
og:title: Best We Are .NET posts — April 2026 | daily.dev
og:description: The most upvoted We Are .NET posts from April 2026, curated by the daily.dev community.
og:image: https://media.daily.dev/image/upload/s--VAY5ToZt--/f_auto/v1724209435/public/daily.dev%20-%20open%20graph
---

# Best of We Are .NET — April 2026

1. 1  
[](https://daily.dev/posts/abstractions-that-heal-abstractions-that-harm-byjb3ozq1 "Abstractions That Heal, Abstractions That Harm")  
Article  
![Avatar of wearedotnet](https://media.daily.dev/image/upload/s--BsnVOa3i--/f_auto/v1718347410/logos/wearedotnet)We Are .NET · 22w  
Abstractions That Heal, Abstractions That Harm  
Good abstractions reduce cognitive load and isolate change; harmful ones accumulate quietly and turn codebases into labyrinths. Using .NET and ASP.NET examples — interfaces, middleware, dependency injection, generic repositories, and Entity Framework — the post argues that abstractions should be introduced only when there are at least two concrete things to generalize across. Premature abstractions built on assumptions rather than evidence create the illusion of flexibility while actually constraining future change. Leaky abstractions like EF's lazy loading obscure rather than simplify. The quality of an abstraction reflects the depth of domain understanding behind it, and vague names like IServiceManager signal abstractions introduced before the domain was understood. The real danger is cumulative drift: individually reasonable layers that compound over time into a system no longer resembling the problem it solves.  
58  
3
2. 2  
[](https://daily.dev/posts/configurationignoreattribute-in-net-11-owcsbs2rj "ConfigurationIgnoreAttribute in .NET 11")  
Article  
![Avatar of wearedotnet](https://media.daily.dev/image/upload/s--BsnVOa3i--/f_auto/v1718347410/logos/wearedotnet)We Are .NET · 20w  
ConfigurationIgnoreAttribute in .NET 11  
NET 11 introduces ConfigurationIgnoreAttribute in Microsoft.Extensions.Configuration, filling a long-standing gap where there was no official way to prevent the configuration binder from populating a specific property. Previously, developers had to use a hacky workaround with ConfigurationKeyNameAttribute and a garbage key name. The new attribute is simple to use — just decorate any property you want excluded from binding. Common use cases include computed/derived properties and parsed representations of raw config values. Note that JsonIgnoreAttribute has no effect on the configuration binder and cannot be used as a substitute.  
22
3. 3  
[](https://daily.dev/posts/asp-net-core-why-i-couldn-t-upgrade-fluentvalidation-past-11-4-in-my-calzolari-grpc-aspnetcore-vali-d0wccrjem "ASP.NET Core: Why I Couldn’t Upgrade FluentValidation Past 11.4 in My Calzolari.Grpc.AspNetCore.Validation Package (and How I Finally Fixed It) – Anthony Giretti's .NET blog")  
Article  
![Avatar of wearedotnet](https://media.daily.dev/image/upload/s--BsnVOa3i--/f_auto/v1718347410/logos/wearedotnet)We Are .NET · 23w  
ASP.NET Core: Why I Couldn’t Upgrade FluentValidation Past 11.4 in My Calzolari.Grpc.AspNetCore.Validation Package (and How I Finally Fixed It) – Anthony Giretti's .NET blog  
The author of the Calzolari.Grpc.AspNetCore.Validation package explains why upgrading FluentValidation past version 11.4 caused runtime crashes in ASP.NET Core gRPC applications. The root cause was FluentValidation 11.5+ making the IValidator<T> generic parameter contravariant (adding the 'in' keyword), which introduced new internal types that slipped through the package's name-based assembly scanning filter and got registered in the DI container as non-instantiable types. The fix involves five improvements to the AddValidators() method: excluding all types from the FluentValidation assembly itself, filtering out abstract classes, interfaces, and open generic types, adding try/catch around GetTypes() calls, and silently skipping irrelevant types instead of crashing. The updated package (version 10.1.0) is now available on NuGet.  
11

[See all We Are .NET archives](/sources/wearedotnet/best-of)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://daily.dev/sources/wearedotnet/best-of/2026/04#page","url":"https://daily.dev/sources/wearedotnet/best-of/2026/04","name":"Best We Are .NET Posts — April 2026","description":"The most upvoted We Are .NET posts from April 2026, curated by the daily.dev community.","isPartOf":{"@type":"WebSite","url":"https://daily.dev"}},{"@type":"ItemList","@id":"https://daily.dev/sources/wearedotnet/best-of/2026/04#items","numberOfItems":3,"itemListElement":[{"@type":"ListItem","position":1,"url":"https://daily.dev/posts/abstractions-that-heal-abstractions-that-harm-byjb3ozq1","name":"Abstractions That Heal, Abstractions That Harm"},{"@type":"ListItem","position":2,"url":"https://daily.dev/posts/configurationignoreattribute-in-net-11-owcsbs2rj","name":"ConfigurationIgnoreAttribute in .NET 11"},{"@type":"ListItem","position":3,"url":"https://daily.dev/posts/asp-net-core-why-i-couldn-t-upgrade-fluentvalidation-past-11-4-in-my-calzolari-grpc-aspnetcore-vali-d0wccrjem","name":"ASP.NET Core: Why I Couldn’t Upgrade FluentValidation Past 11.4 in My Calzolari.Grpc.AspNetCore.Validation Package (and How I Finally Fixed It) – Anthony Giretti's .NET blog"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Sources","item":"https://daily.dev/sources"},{"@type":"ListItem","position":3,"name":"We Are .NET","item":"https://daily.dev/sources/wearedotnet"},{"@type":"ListItem","position":4,"name":"Best of","item":"https://daily.dev/sources/wearedotnet/best-of"},{"@type":"ListItem","position":5,"name":"April 2026"}]}]}
```

