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

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

Apr 11, 2017

Download

Software

dotnetconf
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Как это будет: ASP.NET Core

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

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

ByndyuSoft

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

15 мая 2016

dotnetconf.ru

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

2

О себе

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

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

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

3

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

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

4

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

CoreFX

CoreCLR

ASP .NET Core

CoreRT

RoslynCLI

Mono CLR

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

5

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

RC1 RC2 и далее

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

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

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

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

6

.NET Version Manager (dnvm)

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

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

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

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

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

7

DNX Utility (dnu)

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

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

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

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

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

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

8

DNX

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

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

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

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

9

Quest is completed

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

10

project.json

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

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

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

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

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

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

11

launchSettings.json

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

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

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

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

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

12

Наследие OWIN

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

13

Наследие OWIN, middlewares

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

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)

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

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");

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

16

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

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

services

.AddOptions()

.Configure<ValuesControllerConfiguration>(Configuration);

public ValuesController(IOptions<ValuesControllerConfiguration> optionsAccessor)

{

_configuration = optionsAccessor.Value;

}

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

17

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

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

services

.AddOptions()

.Configure<MyOptions>(Configuration);

services.AddMvc();

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

18

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

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

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

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

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

19

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

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

систему

ILoggerFactory

ILoggerProvider

ILogger

CreateLogger

AddProvider

Startup.Configure

Явный вызов

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

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

20

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

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

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

Startup.Startup

var builder = new ConfigurationBuilder()

.AddNLogConfig("nlog.config");

Startup.Configure

loggerFactory.AddNLog(Configuration);

app.AddNLogWeb();

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

21

Сборка pipeline’а

DI

Middleware1 MVCMiddleware2

Server

MiddlewareN

DNX

Request

Response

LoggerFactory

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

22

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

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

найдется?

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

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

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

23

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

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

pipeline

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

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

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

ошибками

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

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

24

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

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

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

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

2. Пакет NUnitLite

3. Магия в Main

4. Сами тесты

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

25

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

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

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

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

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

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

5. Сами тесты

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

26

Заключение

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

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

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

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

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

релиза.

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

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

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

28

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

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

[email protected]