Skip to content

Base application for the ASP.NET Core 2.2 feature workshop

Notifications You must be signed in to change notification settings

dkozl/AspNetCore22Workshop

Repository files navigation

Workshop about the features of ASP.NET Core 2.2

Prerequisites

  • .NET Core SDK 2.2 (2.2.104 at the time of writing) [download]
  • Visual Studio 2017 or Visual Studio Code

Middleware

  • What is a middleware
  • How to create one

Health checks

  • What are health checks
  • How do they work
  • How to set it up

Simple health check to check connection to DB

async ct =>
{
    using (var connection = new SqlConnection(_configuration.GetConnectionString("BlogDatabase")))
    {
        await connection.OpenAsync(ct);
        using (var command = new SqlCommand("SELECT 1", connection))
        {
            await command.ExecuteScalarAsync(ct);
        }

        return HealthCheckResult.Healthy();
    }
}

Healthcheck setup

UseHealthChecks("/healthcheck", new HealthCheckOptions {Predicate = hc => hc.Tags.Contains("db")})

Health checks in ASP.NET Core

Nuget packages:

Configuration

  • How does it work
  • Setup BlogSettings options
    • from .json
    • from .xml
    • from Action<T>

Dependency Injection

  • How to use default DI
  • What are the limitations
  • How to refactor to 3rd party DI (AutoFac)

AutoFac setup

With ConfigureContainer

Program.cs
.ConfigureServices(services => services.AddAutofac())
Startup.cs
public void ConfigureContainer(ContainerBuilder builder)
{
    builder.RegisterType<BlogRepository>().As<IBlogRepository>();
}

Without ConfigureContainer

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    //

    var containerBuilder = new ContainerBuilder();
    containerBuilder.Populate(services);
    containerBuilder.RegisterType<BlogRepository>().As<IBlogRepository>();
    return new AutofacServiceProvider(containerBuilder.Build());
}

Nuget packages:

Logging

  • Default logging framework
  • Adding 3rd party loggers (NLog)

Nuget packages:

Files abstraction

  • How to abstract dependency of physical file and write testable code

API Documentation

  • Setup Swagger JSON
  • Setup Swagger UI
  • Create custom ApiInfo view

Nuget packages:

Views

  • Difference between Razor Pages and Views
  • Introduction to View Components

Razor page directive

@page

Page model

public class BlogModel : PageModel

GET action

public async Task OnGetAsync()
{
   //
}

View Component class

[ViewComponent(Name = "Blog")]
public class BlogComponent : ViewComponent

Invoke action

public Task<IViewComponentResult> InvokeAsync(Blog blog)
{
   //
}

View Component usage

<vc:blog blog="blog"></vc:blog>

Testing

  • Startup.cs integration testing
  • Code coverage

Collect test coverage

dotnet test .\Workshop.App.Tests\ /p:CollectCoverage=true /p:Exclude="[xunit.*]*"

Integration tests in ASP.NET Core

Nuget packages:

About

Base application for the ASP.NET Core 2.2 feature workshop

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published