Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext

G
Dependency Injection в ASP.NET
MVC и ASP.NET vNext
Давайте знакомиться
Андрей Лесков
Ведущий разработчик
andrey.leskov@gmail
2
Связной и ASP.Net MVC
Непростой бизнес
Большая инфраструктура
Скрывающее представление
Множестово правил
3
Последстивия для программиста
4
Dependency injection
5
SOLID
Dependency Inversion
Dependency injection ServiceLocator
Constructor injection
Property injection Method injection
DI в ASP.Net MVC
● Подача зависимостей контроллера извне
● Классический вариант - в конструктор
● Потребление готовых зависимости
● Зависимость от интерфейсов
6
Модель Register - Resolve
7
Interface Implementation
Container
ConsoleLoggerILogger
OrderServiceIService
DogIAnimal
IAnimal
Dog
Register Resolve
Общая схема DI в ASP.MVC
8
MvcHandler
IControllerFactory
Controller
Dependencies Resolve
Route
Dependencies RegisterAppStart
DI в коде
9
Dependencies Register
Dependencies Resolve
Controller
Как помогает DI при наведении порядка
● Структурирует код
● Упрощает контекст
● Повышает читаемость
● Разделяет на компоненты
10
Как мы представляем классы
DI повышает гранулярность
11
Service Locator как альтернатива
● Единое окно получения зависимостей
● Выдаёт любой тип
● Универсальная фабрика
12
Service Locator в коде. DependencyResolver.
13
Dependencies Register
Dependencies ResolveController
Почему нам больше подошёл DI
● Явное определение зависимостей
● Тестируемость
● Выявление запахов
● Не надо читать код для поиска зависимостей
14
Корень композиции
● место, где из компонентов собирается программа
● место, где настраивается контейнер
15
Настройка корня композиции
● конфигурируем в коде
● xml - конфигурация не всегда удобна
● deploy из-за изменения конфига
● анализируем случаи правки конфигураций
16
Общая схема DI в ASP.MVC
17
MvcHandler
IControllerFactory
Controller
MyControllerFactory
IDependecyResolver
Dependencies Resovle
DefaultControllerFactory
Dependencies Register
MyDependecyResolver
Route
AppStart
ReportGenerator
Пример: витрины данных
Controller
ReportFromCacheGenerator
Today Archive
DataMart
IReportGenerator
ReportGenerator
ReportBySourceGenerator
BusinessLogic
DataAccess
MultiSourceDataAccess
TodayDataAccess
ArchiveDataAccess
ReportPrepareService
18
Выгода от компоновки
● Простое переключение режимов витрин
● Переиспользование бизнес-логики
● Максимальное покрытие тестами
19
В чём ещё нам помог DI
● Простое переключение между контурами
разработки.
● Вынос настроек в БД, сохраняя тестируемость
● Выделение модулей системы
20
DI в ASP.Net vNext
● Единый ServiceLocator на весь технологический
стэк:
Routing
MVC
SignalR
EntityFramework
● Поддержка существуещего API для работы с DI
21
Пример: настройка контейнера vNext
public class Startup
{
public void Configure(IBuilder app)
{
app.UseServices(services =>
{
//Dependencies register
services.AddTransient<IMessageGenerator,HelloMessageGenerator>();
});
}
}
22
Свой контейнер в vNext
public void Configure(IBuilder app){
ServiceCollection services = new ServiceCollection();
services.Add(OptionsServices.GetDefaultServices());
#if NET45
Container container= new Container();
//configure
container.RegisterType<ILogger,Logger>();
app.ApplicationServices = container.Resolve<IServiceProvider>();
#else
services.AddTransient<IMessageGenerator,HelloMessageGenerator>();ap
p.ApplicationServices =
services.BuildServiceProvider(app.ApplicationServices);
#endif
23
Что можно сделать в vNext
24
● Передача IDbExecutionStrategy из Controller в EF
● Передача IDbInterceptor из Соntroller в EF
Сложности DI
● Тестирование контейнера
● Труднее менять конструкторы
● Больше проектирования
● Усиление протечек абстракций
25
Выгоды Cвязного от DI
● Ускорение разработки
● Ускорение отладки
● Меньше ошибок
● Толерантность к сложной бизнес-логике
26
Спасибо за внимание
Вопросы
Пример: витрины данных
Данные за
сегодня
Архив
Сайт
Витрина
данных
Отчёт
Модель
отчёта
Вычисления
(Долго)
Отображение
Сервис
Документ
(много
данных)
28
1 de 28

Recomendados

Андрей Завадский "Бессерверная архитектура" por
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
730 visualizações39 slides
Архитектурные решения при создании облачного сервиса на Asp.Net por
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
660 visualizações16 slides
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы" por
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"Fwdays
1.6K visualizações40 slides
ASP.NET MVC por
ASP.NET MVCASP.NET MVC
ASP.NET MVCGetDev.NET
784 visualizações21 slides
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник por
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникSigma Software
76 visualizações19 slides
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев por
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевMail.ru Group
2K visualizações42 slides

Mais conteúdo relacionado

Mais procurados

Sergey Gavruk - Mix11 por
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11beloslab
314 visualizações32 slides
Станислав Цыганов "SOA в iOS разработке" por
Станислав Цыганов "SOA в iOS разработке"Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"IT Event
1K visualizações115 slides
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од... por
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
1.2K visualizações28 slides
Будущее ASP.NET por
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NETGoSharp
948 visualizações16 slides
AntonSaburov (Gemini-Systems) @ CodeCamp2011 por
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011CodeCamp
280 visualizações8 slides
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий por
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
1K visualizações30 slides

Mais procurados(14)

Sergey Gavruk - Mix11 por beloslab
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11
beloslab314 visualizações
Станислав Цыганов "SOA в iOS разработке" por IT Event
Станислав Цыганов "SOA в iOS разработке"Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"
IT Event1K visualizações
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од... por GoSharp
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
GoSharp1.2K visualizações
Будущее ASP.NET por GoSharp
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NET
GoSharp948 visualizações
AntonSaburov (Gemini-Systems) @ CodeCamp2011 por CodeCamp
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011
CodeCamp280 visualizações
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий por solit
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
solit1K visualizações
Rambler.iOS #8: Сервис-ориентированная архитектура por RAMBLER&Co
Rambler.iOS #8: Сервис-ориентированная архитектураRambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Сервис-ориентированная архитектура
RAMBLER&Co1.1K visualizações
Sergey Gavruk - WebMatrix por beloslab
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrix
beloslab323 visualizações
Ruby on Rails снижаем стоимость разработки por Media Gorod
Ruby on Rails снижаем стоимость разработкиRuby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработки
Media Gorod374 visualizações
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож... por Ilya Kaznacheev
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Ilya Kaznacheev475 visualizações
Обзор Cisco CVP por Cisco Russia
Обзор Cisco CVPОбзор Cisco CVP
Обзор Cisco CVP
Cisco Russia 738 visualizações
Web application framework por Viktor Chukhantsev
Web application frameworkWeb application framework
Web application framework
Viktor Chukhantsev311 visualizações
Разработка энерго-эффективных Tizen приложений для Gear por Kirill Danilov
Разработка энерго-эффективных Tizen приложений для GearРазработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для Gear
Kirill Danilov746 visualizações

Destaque

Рейтинг навыков .NET-разработчика por
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаgeekfamilyrussia
676 visualizações27 slides
Лучшие практики корпоративной разработки. Лекция 0: обзор курса. por
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
512 visualizações30 slides
ASP.NET Web API por
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
1.8K visualizações19 slides
Обзор технологических новинок в .Net с точки зрения Web-программиста por
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программистаMikhail Shcherbakov
546 visualizações13 slides
Асинхронное программирование в ASP.NET MVC por
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVCEugene Agafonov
1.1K visualizações28 slides
Математические основы методов решений систем логических уравнений por
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийOlga Maksimenkova
839 visualizações54 slides

Destaque(10)

Рейтинг навыков .NET-разработчика por geekfamilyrussia
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
geekfamilyrussia676 visualizações
Лучшие практики корпоративной разработки. Лекция 0: обзор курса. por Vadim Martynov
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov512 visualizações
ASP.NET Web API por GetDev.NET
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
GetDev.NET1.8K visualizações
Обзор технологических новинок в .Net с точки зрения Web-программиста por Mikhail Shcherbakov
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программиста
Mikhail Shcherbakov546 visualizações
Асинхронное программирование в ASP.NET MVC por Eugene Agafonov
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVC
Eugene Agafonov1.1K visualizações
Математические основы методов решений систем логических уравнений por Olga Maksimenkova
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
Olga Maksimenkova839 visualizações
knockout.js por Anton Patrushev
knockout.jsknockout.js
knockout.js
Anton Patrushev691 visualizações
Аспектно-ориентированный подход на службе веб-приложений por Alexander Byndyu
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
Alexander Byndyu434 visualizações
Введение в Knockout por Pavel Tsukanov
Введение в Knockout Введение в Knockout
Введение в Knockout
Pavel Tsukanov530 visualizações
Javascript-фреймворки:
 должен остаться только один por Sergey Xek
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek1.7K visualizações

Similar a Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25 por
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
1.2K visualizações83 slides
redux: the best for isomorphic apps por
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
969 visualizações83 slides
ASP.NET, MVC, ASP.NET MVC por
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
2.6K visualizações29 slides
RST2014_Taganrog_IncodingFramework por
RST2014_Taganrog_IncodingFrameworkRST2014_Taganrog_IncodingFramework
RST2014_Taganrog_IncodingFrameworkRussianStartupTour
140 visualizações12 slides
ASP.NET MVC 3 por
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3Денис Резник
637 visualizações25 slides
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS por
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOSОмские ИТ-субботники
404 visualizações41 slides

Similar a Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext(20)

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25 por MoscowJS
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
MoscowJS1.2K visualizações
redux: the best for isomorphic apps por Denis Izmaylov
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
Denis Izmaylov969 visualizações
ASP.NET, MVC, ASP.NET MVC por GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K visualizações
RST2014_Taganrog_IncodingFramework por RussianStartupTour
RST2014_Taganrog_IncodingFrameworkRST2014_Taganrog_IncodingFramework
RST2014_Taganrog_IncodingFramework
RussianStartupTour140 visualizações
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS por Омские ИТ-субботники
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной... por Cisco Russia
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Cisco Russia 504 visualizações
ПартФорум DIRECTUM 2013 - разработка прикладных решений por Виктор Золотов
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
Виктор Золотов503 visualizações
Presentation por VasayXTX
PresentationPresentation
Presentation
VasayXTX175 visualizações
Виртуализация критически важных приложений por Jack Chikovany
Виртуализация критически важных приложенийВиртуализация критически важных приложений
Виртуализация критически важных приложений
Jack Chikovany586 visualizações
Как это будет: ASP.NET Core por DotNetConf
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
DotNetConf767 visualizações
Паттерны проектирования por ITCP Community
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
ITCP Community127 visualizações
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus... por Cisco Russia
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Cisco Russia 945 visualizações
Обзор новых возможностей UCCX 10 por Cisco Russia
Обзор новых возможностей UCCX 10Обзор новых возможностей UCCX 10
Обзор новых возможностей UCCX 10
Cisco Russia 2K visualizações
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл... por Cisco Russia
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Russia 452 visualizações
Инновационное SDN решение для ЦОД Cisco ACI Anywhere por Cisco Russia
Инновационное SDN решение для ЦОД Cisco ACI AnywhereИнновационное SDN решение для ЦОД Cisco ACI Anywhere
Инновационное SDN решение для ЦОД Cisco ACI Anywhere
Cisco Russia 243 visualizações
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п... por Cisco Russia
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco Russia 2.3K visualizações
Готовим Docker для Автоматизации Тестирования por COMAQA.BY
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY 714 visualizações
ASP.NET MVC: new era? por Alexander Konduforov
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
Alexander Konduforov1.6K visualizações
Инфраструктура Cisco для построения облачной платформы por Cisco Russia
Инфраструктура Cisco для построения облачной платформыИнфраструктура Cisco для построения облачной платформы
Инфраструктура Cisco для построения облачной платформы
Cisco Russia 545 visualizações

Mais de GoSharp

TPL Dataflow – зачем и для кого? por
TPL Dataflow – зачем и для кого?TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?GoSharp
1.5K visualizações24 slides
Живые приложения с Rx por
Живые приложения с RxЖивые приложения с Rx
Живые приложения с RxGoSharp
682 visualizações32 slides
Anemic Domain Model - антипаттерн или SOLID? por
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?GoSharp
1.3K visualizações16 slides
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в... por
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...GoSharp
708 visualizações72 slides
UniversalApp "убийца" WPF или же это WPF+ ? por
UniversalApp "убийца" WPF или же это WPF+ ?UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?GoSharp
1.3K visualizações40 slides
UI тестирование WPF приложений в Дойче Банке por
UI тестирование WPF приложений в Дойче БанкеUI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче БанкеGoSharp
1K visualizações13 slides

Mais de GoSharp(20)

TPL Dataflow – зачем и для кого? por GoSharp
TPL Dataflow – зачем и для кого?TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?
GoSharp1.5K visualizações
Живые приложения с Rx por GoSharp
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
GoSharp682 visualizações
Anemic Domain Model - антипаттерн или SOLID? por GoSharp
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?
GoSharp1.3K visualizações
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в... por GoSharp
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
GoSharp708 visualizações
UniversalApp "убийца" WPF или же это WPF+ ? por GoSharp
UniversalApp "убийца" WPF или же это WPF+ ?UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?
GoSharp1.3K visualizações
UI тестирование WPF приложений в Дойче Банке por GoSharp
UI тестирование WPF приложений в Дойче БанкеUI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче Банке
GoSharp1K visualizações
Практика применения Enterprise Architect и T4-шаблонов для разработки системы... por GoSharp
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
GoSharp683 visualizações
За что не любить EF и чем его заменить por GoSharp
За что не любить EF и чем его заменитьЗа что не любить EF и чем его заменить
За что не любить EF и чем его заменить
GoSharp586 visualizações
MVVM в WinForms – DevExpress Way (теория и практика) por GoSharp
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
GoSharp4.6K visualizações
Паттерны быстрой разработки WPF MVVM бизнес-приложений por GoSharp
Паттерны быстрой разработки WPF MVVM бизнес-приложенийПаттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложений
GoSharp1K visualizações
Gosharp Intro por GoSharp
Gosharp IntroGosharp Intro
Gosharp Intro
GoSharp291 visualizações
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET por GoSharp
Проектирование сетевой инфраструктуры под SOA проекты ASP.NETПроектирование сетевой инфраструктуры под SOA проекты ASP.NET
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
GoSharp727 visualizações
Мониторинг приложений ASP.NET на основе сервиса Application Insights por GoSharp
Мониторинг приложений ASP.NET на основе сервиса Application InsightsМониторинг приложений ASP.NET на основе сервиса Application Insights
Мониторинг приложений ASP.NET на основе сервиса Application Insights
GoSharp597 visualizações
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET por GoSharp
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
GoSharp1.1K visualizações
ASP.NET Internals por GoSharp
ASP.NET InternalsASP.NET Internals
ASP.NET Internals
GoSharp1.1K visualizações
Кросплатформенная разработка на ASP.NET vNext por GoSharp
Кросплатформенная разработка на ASP.NET vNextКросплатформенная разработка на ASP.NET vNext
Кросплатформенная разработка на ASP.NET vNext
GoSharp1.1K visualizações
Коучинг команд разработки и коучинговые инструменты в работе тимлида por GoSharp
Коучинг команд разработки и коучинговые инструменты в работе тимлидаКоучинг команд разработки и коучинговые инструменты в работе тимлида
Коучинг команд разработки и коучинговые инструменты в работе тимлида
GoSharp812 visualizações
Взаимное влияние Source Code Management и других средств организации разработки por GoSharp
Взаимное влияние Source Code Management и других средств организации разработкиВзаимное влияние Source Code Management и других средств организации разработки
Взаимное влияние Source Code Management и других средств организации разработки
GoSharp545 visualizações
DevOPS инструменты для .NET проектов por GoSharp
DevOPS инструменты для .NET проектовDevOPS инструменты для .NET проектов
DevOPS инструменты для .NET проектов
GoSharp910 visualizações
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании por GoSharp
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компанииДоски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
GoSharp539 visualizações

Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext

  • 1. Dependency Injection в ASP.NET MVC и ASP.NET vNext
  • 3. Связной и ASP.Net MVC Непростой бизнес Большая инфраструктура Скрывающее представление Множестово правил 3
  • 5. Dependency injection 5 SOLID Dependency Inversion Dependency injection ServiceLocator Constructor injection Property injection Method injection
  • 6. DI в ASP.Net MVC ● Подача зависимостей контроллера извне ● Классический вариант - в конструктор ● Потребление готовых зависимости ● Зависимость от интерфейсов 6
  • 7. Модель Register - Resolve 7 Interface Implementation Container ConsoleLoggerILogger OrderServiceIService DogIAnimal IAnimal Dog Register Resolve
  • 8. Общая схема DI в ASP.MVC 8 MvcHandler IControllerFactory Controller Dependencies Resolve Route Dependencies RegisterAppStart
  • 9. DI в коде 9 Dependencies Register Dependencies Resolve Controller
  • 10. Как помогает DI при наведении порядка ● Структурирует код ● Упрощает контекст ● Повышает читаемость ● Разделяет на компоненты 10
  • 11. Как мы представляем классы DI повышает гранулярность 11
  • 12. Service Locator как альтернатива ● Единое окно получения зависимостей ● Выдаёт любой тип ● Универсальная фабрика 12
  • 13. Service Locator в коде. DependencyResolver. 13 Dependencies Register Dependencies ResolveController
  • 14. Почему нам больше подошёл DI ● Явное определение зависимостей ● Тестируемость ● Выявление запахов ● Не надо читать код для поиска зависимостей 14
  • 15. Корень композиции ● место, где из компонентов собирается программа ● место, где настраивается контейнер 15
  • 16. Настройка корня композиции ● конфигурируем в коде ● xml - конфигурация не всегда удобна ● deploy из-за изменения конфига ● анализируем случаи правки конфигураций 16
  • 17. Общая схема DI в ASP.MVC 17 MvcHandler IControllerFactory Controller MyControllerFactory IDependecyResolver Dependencies Resovle DefaultControllerFactory Dependencies Register MyDependecyResolver Route AppStart
  • 18. ReportGenerator Пример: витрины данных Controller ReportFromCacheGenerator Today Archive DataMart IReportGenerator ReportGenerator ReportBySourceGenerator BusinessLogic DataAccess MultiSourceDataAccess TodayDataAccess ArchiveDataAccess ReportPrepareService 18
  • 19. Выгода от компоновки ● Простое переключение режимов витрин ● Переиспользование бизнес-логики ● Максимальное покрытие тестами 19
  • 20. В чём ещё нам помог DI ● Простое переключение между контурами разработки. ● Вынос настроек в БД, сохраняя тестируемость ● Выделение модулей системы 20
  • 21. DI в ASP.Net vNext ● Единый ServiceLocator на весь технологический стэк: Routing MVC SignalR EntityFramework ● Поддержка существуещего API для работы с DI 21
  • 22. Пример: настройка контейнера vNext public class Startup { public void Configure(IBuilder app) { app.UseServices(services => { //Dependencies register services.AddTransient<IMessageGenerator,HelloMessageGenerator>(); }); } } 22
  • 23. Свой контейнер в vNext public void Configure(IBuilder app){ ServiceCollection services = new ServiceCollection(); services.Add(OptionsServices.GetDefaultServices()); #if NET45 Container container= new Container(); //configure container.RegisterType<ILogger,Logger>(); app.ApplicationServices = container.Resolve<IServiceProvider>(); #else services.AddTransient<IMessageGenerator,HelloMessageGenerator>();ap p.ApplicationServices = services.BuildServiceProvider(app.ApplicationServices); #endif 23
  • 24. Что можно сделать в vNext 24 ● Передача IDbExecutionStrategy из Controller в EF ● Передача IDbInterceptor из Соntroller в EF
  • 25. Сложности DI ● Тестирование контейнера ● Труднее менять конструкторы ● Больше проектирования ● Усиление протечек абстракций 25
  • 26. Выгоды Cвязного от DI ● Ускорение разработки ● Ускорение отладки ● Меньше ошибок ● Толерантность к сложной бизнес-логике 26
  • 28. Пример: витрины данных Данные за сегодня Архив Сайт Витрина данных Отчёт Модель отчёта Вычисления (Долго) Отображение Сервис Документ (много данных) 28