Как это будет: ASP.NET Core

28
Как это будет: ASP .NET Core Дмитрий Литичевский ByndyuSoft 12-я конференция .NET разработчиков 15 мая 2016 dotnetconf.ru

Transcript of Как это будет: ASP.NET Core

Как это будет: ASP .NET Core

Дмитрий Литичевский

ByndyuSoft

12-я конференция .NET разработчиков

15 мая 2016

dotnetconf.ru

2

О себе

Team lead в компании ByndyuSoft

Аспирант ЧелГУ, дискретная математика и математическая кибернетика

3

Давным-давно,в далеком-далеком 2014

4

Структура .NET Core

CoreFX

CoreCLR

ASP .NET Core

CoreRT

RoslynCLI

Mono CLR

5

Необходимый инструментарий

RC1 RC2 и далее

1. dnvm, менеджер рантаймов

.NET CLI (сборка и запуск)2. dnu, управление сборкой

3. dnx, запуск приложений

6

.NET Version Manager (dnvm)

Утилиты для установки новых и управления существующими рантаймами

Умеет:1. Устанавливать последние версии

2. Просматривать список установленных версии

3. Задавать активное окружение

7

DNX Utility (dnu)

Утилита, управляющая пакетами приложения и отвечающая за его сборку

Умеет:1. Установка пакетов

2. Восстановление пакетов приложения

3. Сборка приложения

4. Публикация приложения

8

DNX

Утилита, предоставляющая возможность запускать выбранное приложение

Умеет:1. Выбирать конфигурацию для запуска

2. Запускать приложение под отладкой

9

Quest is completed

10

project.json

Основные секции:1. frameworks (окружение, для которого будет выполняться сборка, и его зависимости)

2. dependencies (зависимости, не зависящие от окружений)

3. configurations (конфигурации сборки проекта)

4. compilationOptions (опции компиляции, могут задаваться для проекта в целом и для конкретной конфигурации)

5. commands (команды запуска приложения)

11

launchSettings.json

Профайлы запуска приложения, доступны только для Visual Studio

Для профайла можно настроить:1. Команду запуска

2. Переменные окружения

3. Запуск браузера

12

Наследие OWIN

13

Наследие OWIN, middlewares

14

Startup.cs

В этом файле (может называть по другому) содержится класс, решающий задачи:1. Чтение и загрузка конфигурации приложения

2. Настройка DI контейнера

3. Настройка pipeline’а обработки запросов

public Startup(IHostingEnvironment env)

public IServiceProvider ConfigureServices(IServiceCollection services)

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

15

Трансформация конфигурации

Лучше один раз увидеть =)

var builder = new ConfigurationBuilder()

.AddJsonFile("appsettings.json")

.AddJsonFile($"appsettings.{env.EnvironmentName}.json")

.AddNLogConfig("nlog.config");

builder.AddEnvironmentVariables();

Configuration = builder

.Build()

.ReloadOnChanged("appsettings.json")

.ReloadOnChanged($"appsettings.{env.EnvironmentName}.json");

16

Проброс опций

Не будет больше ConfigurationManager.AppSettings["Option"])Лучше один раз увидеть =)

services

.AddOptions()

.Configure<ValuesControllerConfiguration>(Configuration);

public ValuesController(IOptions<ValuesControllerConfiguration> optionsAccessor)

{

_configuration = optionsAccessor.Value;

}

17

Встроенный DI контейнер

ASP .NET Core содержит встроенный контейнер, в котором регистрируются системные зависимости

services

.AddOptions()

.Configure<MyOptions>(Configuration);

services.AddMvc();

18

Внешний DI контейнер

Для использования своего любимого контейнера нужно:

1. Скопировать зависимости из системного контейнера в свой

2. Вернуть реализацию IServiceProvider в методе ConfigureServices

19

Встроенное логирование

ASP .NET Core содержит подсистему логирования, глубоко встроенную в

систему

ILoggerFactory

ILoggerProvider

ILogger

CreateLogger

AddProvider

Startup.Configure

Явный вызов

Неявный вызов через DI

20

Использование NLog

Когда хочется чего-то привычного, можно воспользоваться NLog. Log4net

пока отсутствует…

Startup.Startup

var builder = new ConfigurationBuilder()

.AddNLogConfig("nlog.config");

Startup.Configure

loggerFactory.AddNLog(Configuration);

app.AddNLogWeb();

21

Сборка pipeline’а

DI

Middleware1 MVCMiddleware2

Server

MiddlewareN

DNX

Request

Response

LoggerFactory

22

Обработка ошибок по умолчанию

Что будет, если на сервере произойдет ошибка или нужного метода не

найдется?

1. Ошибка упадет в логи при настроенном логировании

2. С сервера придет пустой Response с соответствующим кодом

23

Настройки обработки ошибок

В процесс обработки можно вмешаться путем встраивание middleware в

pipeline

1. UseDeveloperExceptionPage, показывает красивую страницу ошибки и логирует ее

2. UseExceptionHandler, логирует ошибку и вызывает заданный обработчик

3. UseStatusCodePagesWithReExecute и его сородичи, определяют обработку ответов с

ошибками

4. Написание и встраивание своих middleware

24

Запуск NUnit тестов

Запускать тесты через R# или Test Explorer не получится, они будут

запускаться в консоли. Для этого потребуется:

1. Консольный проект

2. Пакет NUnitLite

3. Магия в Main

4. Сами тесты

25

Запуск xUnit тестов

Запускать тесты можно через Test Explorer! Для этого потребуется:

1. Консольный проект

2. Удаление класса Program

3. Пакет xunit.runner.dnx

4. Магия в секции commands

5. Сами тесты

26

Заключение

Закончим на позитиве!

1. ASP .NET Core является закономерным развитием предыдущих версий

и существующих технологий

2. Многие вещи стали проще в освоении и реализации

3. Части нужного, особенно пакетов, не хватает, нужно дождаться

релиза.

27

Литература и примерыЛитература:

1. https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introducing-net-core/

2. https://blogs.msdn.microsoft.com/cesardelatorre/2014/11/18/what-is-net-core-5-and-asp-net-5-within-net-2015-preview/

3. https://docs.asp.net/en/latest/conceptual-overview/dotnetcore.html

4. https://github.com/dotnet/coreclr/tree/master/Documentation/install

5. https://github.com/aspnet/Home/issues/1381

6. http://www.hanselman.com/blog/AnUpdateOnASPNETCore10RC2.aspx

7. https://github.com/aspnet/Home/wiki/Project.json-file

8. https://github.com/NLog/NLog.Web

9. http://www.alteridem.net/2015/11/04/testing-net-core-using-nunit-3/

Примеры: https://github.com/litichevskiydv/DnxTestWebApp

28

Спасибо за внимание

Литичевский Дмитрий

[email protected]