- Read-only auto-properties
- Value types, reference types
- Static fields, static classes
- Extension methods
- Collections and other useful data types
- Linq
- Generics
- Async / await
- Serialization, JSON.NET
- Named tuples, deconstruction
- Covariance, contravariance
- SOLID
- Concise code (Skeet C#)
- DateTime / DateTimeOffset pitfalls
- Core concepts
- Application lifecycle, pipeline/middleware concept, Startup.cs
- Cookies: basics, authorization, localization
- Configuring DI beyond default, Autofac
- Environment-specific configurations--best practices
- Models, controllers
- HTTP verb mapping
- Proper routing conventions
- AutoMapper
- Models, controllers, views
- Razor
- Layouts
- Razor pages, ViewModels, DI into pages
- IoC / DI
- Scope lifetime,
LifetimeScope
Autofac
- On-demand instantiation, (
scope.Resolve
) - Bulk registration (
RegisterAssemblyTypes
), named registration, typed registration - Resolving contructor parameters, autofactories
- Factory, DI, Repository, Singleton, Command, Behavior, Mediator, Observer
- Exceptions, log and rethrow
- Error handling filters (KnownExceptionHandlingFilter)
- Best practices: typed Exceptions (UserFriendlyException, ItemNotFoundException)
- DI approach
- Configurable loggers (appsettings)
- Structured logging
- External targets (e.g. Seq)
- Code First, migrations
- Scaffolding from existing databases
- Authentication and authorization
- OAuth 2
- Cookies
- Tokens
- Refresh token pattern and antipattern
- Secured controller actions
- xUnit, Facts and Theories
- Unit tests
- Integration tests
- DI and mocking
- e2e tests
- Services, separation of concerns
- Stateless applications
- Object lifetime
- Caching (Redis, memcached)
- eShopOnContainers--many useful concepts illustrated in this reference implementation
- NorthwindTraders--slightly less overwhelming, yet very good reference implementation of a relatively complex architecture
- Resource localization (
.resx
) - Culture cookies, request params, HTTP headers
- Culture-dependent formatting (UICulture)
- ASP.NET Core MVC
- Multithreading
- Synchronization mechanisms (lock, monitor)
- Background tasks
- Hosting ASP.NET Core apps
- Loose coupling
- Domain objects, business logic
- Containerization, Docker
- Resilient application, partial failure handling, exponential backoff