Как это будет: ASP.NET Core
-
Upload
dotnetconf -
Category
Software
-
view
524 -
download
1
Transcript of Как это будет: ASP.NET Core
Как это будет: ASP .NET Core
Дмитрий Литичевский
ByndyuSoft
12-я конференция .NET разработчиков
15 мая 2016
dotnetconf.ru
2
О себе
Team lead в компании ByndyuSoft
Аспирант ЧелГУ, дискретная математика и математическая кибернетика
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. Запускать приложение под отладкой
10
project.json
Основные секции:1. frameworks (окружение, для которого будет выполняться сборка, и его зависимости)
2. dependencies (зависимости, не зависящие от окружений)
3. configurations (конфигурации сборки проекта)
4. compilationOptions (опции компиляции, могут задаваться для проекта в целом и для конкретной конфигурации)
5. commands (команды запуска приложения)
11
launchSettings.json
Профайлы запуска приложения, доступны только для Visual Studio
Для профайла можно настроить:1. Команду запуска
2. Переменные окружения
3. Запуск браузера
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