SlideShare a Scribd company logo
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

More Related Content

What's hot

Sergey Gavruk - Mix11
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11beloslab
 
Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"
IT Event
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
GoSharp
 
Будущее ASP.NET
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NET
GoSharp
 
AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011CodeCamp
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
solit
 
Rambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Сервис-ориентированная архитектураRambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Сервис-ориентированная архитектура
RAMBLER&Co
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixbeloslab
 
Ruby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиRuby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиMedia Gorod
 
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Ilya Kaznacheev
 
RoboGuice
RoboGuiceRoboGuice
Обзор Cisco CVP
Обзор Cisco CVPОбзор Cisco CVP
Обзор Cisco CVP
Cisco Russia
 
Разработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для GearРазработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для Gear
Kirill Danilov
 

What's hot (14)

Sergey Gavruk - Mix11
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11
 
Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
Будущее ASP.NET
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NET
 
AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Rambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Сервис-ориентированная архитектураRambler.iOS #8: Сервис-ориентированная архитектура
Rambler.iOS #8: Сервис-ориентированная архитектура
 
Sergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrixSergey Gavruk - WebMatrix
Sergey Gavruk - WebMatrix
 
Ruby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиRuby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработки
 
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
 
RoboGuice
RoboGuiceRoboGuice
RoboGuice
 
Обзор Cisco CVP
Обзор Cisco CVPОбзор Cisco CVP
Обзор Cisco CVP
 
Web application framework
Web application frameworkWeb application framework
Web application framework
 
Разработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для GearРазработка энерго-эффективных Tizen приложений для Gear
Разработка энерго-эффективных Tizen приложений для Gear
 

Viewers also liked

Рейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
geekfamilyrussia
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
GetDev.NET
 
Обзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программиста
Mikhail Shcherbakov
 
Асинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVC
Eugene Agafonov
 
Математические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
Olga Maksimenkova
 
knockout.js
knockout.jsknockout.js
knockout.js
Anton Patrushev
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
Alexander Byndyu
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
Pavel Tsukanov
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 

Viewers also liked (10)

Рейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Обзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программиста
 
Асинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVC
 
Математические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
 
knockout.js
knockout.jsknockout.js
knockout.js
 
Аспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 

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

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

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

redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
RST2014_Taganrog_IncodingFramework
RST2014_Taganrog_IncodingFrameworkRST2014_Taganrog_IncodingFramework
RST2014_Taganrog_IncodingFramework
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
 
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
 
Presentation
PresentationPresentation
Presentation
 
Виртуализация критически важных приложений
Виртуализация критически важных приложенийВиртуализация критически важных приложений
Виртуализация критически важных приложений
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
 
Обзор новых возможностей UCCX 10
Обзор новых возможностей UCCX 10Обзор новых возможностей UCCX 10
Обзор новых возможностей UCCX 10
 
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
 
Инновационное SDN решение для ЦОД Cisco ACI Anywhere
Инновационное SDN решение для ЦОД Cisco ACI AnywhereИнновационное SDN решение для ЦОД Cisco ACI Anywhere
Инновационное SDN решение для ЦОД Cisco ACI Anywhere
 
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Инфраструктура Cisco для построения облачной платформы
Инфраструктура Cisco для построения облачной платформыИнфраструктура Cisco для построения облачной платформы
Инфраструктура Cisco для построения облачной платформы
 

More from GoSharp

TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?
GoSharp
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
GoSharp
 
Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?
GoSharp
 
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
GoSharp
 
UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?
GoSharp
 
UI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче БанкеUI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче Банке
GoSharp
 
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
GoSharp
 
За что не любить EF и чем его заменить
За что не любить EF и чем его заменитьЗа что не любить EF и чем его заменить
За что не любить EF и чем его заменить
GoSharp
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
GoSharp
 
Паттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложенийПаттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложенийGoSharp
 
Gosharp Intro
Gosharp IntroGosharp Intro
Gosharp Intro
GoSharp
 
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
Проектирование сетевой инфраструктуры под SOA проекты ASP.NETПроектирование сетевой инфраструктуры под SOA проекты ASP.NET
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
GoSharp
 
Мониторинг приложений ASP.NET на основе сервиса Application Insights
Мониторинг приложений ASP.NET на основе сервиса Application InsightsМониторинг приложений ASP.NET на основе сервиса Application Insights
Мониторинг приложений ASP.NET на основе сервиса Application Insights
GoSharp
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
GoSharp
 
ASP.NET Internals
ASP.NET InternalsASP.NET Internals
ASP.NET Internals
GoSharp
 
Кросплатформенная разработка на ASP.NET vNext
Кросплатформенная разработка на ASP.NET vNextКросплатформенная разработка на ASP.NET vNext
Кросплатформенная разработка на ASP.NET vNext
GoSharp
 
Коучинг команд разработки и коучинговые инструменты в работе тимлида
Коучинг команд разработки и коучинговые инструменты в работе тимлидаКоучинг команд разработки и коучинговые инструменты в работе тимлида
Коучинг команд разработки и коучинговые инструменты в работе тимлида
GoSharp
 
Взаимное влияние Source Code Management и других средств организации разработки
Взаимное влияние Source Code Management и других средств организации разработкиВзаимное влияние Source Code Management и других средств организации разработки
Взаимное влияние Source Code Management и других средств организации разработки
GoSharp
 
DevOPS инструменты для .NET проектов
DevOPS инструменты для .NET проектовDevOPS инструменты для .NET проектов
DevOPS инструменты для .NET проектов
GoSharp
 
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компанииДоски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
GoSharp
 

More from GoSharp (20)

TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?
 
Живые приложения с Rx
Живые приложения с RxЖивые приложения с Rx
Живые приложения с Rx
 
Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?
 
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
 
UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?
 
UI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче БанкеUI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче Банке
 
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
Практика применения Enterprise Architect и T4-шаблонов для разработки системы...
 
За что не любить EF и чем его заменить
За что не любить EF и чем его заменитьЗа что не любить EF и чем его заменить
За что не любить EF и чем его заменить
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
 
Паттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложенийПаттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложений
 
Gosharp Intro
Gosharp IntroGosharp Intro
Gosharp Intro
 
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
Проектирование сетевой инфраструктуры под SOA проекты ASP.NETПроектирование сетевой инфраструктуры под SOA проекты ASP.NET
Проектирование сетевой инфраструктуры под SOA проекты ASP.NET
 
Мониторинг приложений ASP.NET на основе сервиса Application Insights
Мониторинг приложений ASP.NET на основе сервиса Application InsightsМониторинг приложений ASP.NET на основе сервиса Application Insights
Мониторинг приложений ASP.NET на основе сервиса Application Insights
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
ASP.NET Internals
ASP.NET InternalsASP.NET Internals
ASP.NET Internals
 
Кросплатформенная разработка на ASP.NET vNext
Кросплатформенная разработка на ASP.NET vNextКросплатформенная разработка на ASP.NET vNext
Кросплатформенная разработка на ASP.NET vNext
 
Коучинг команд разработки и коучинговые инструменты в работе тимлида
Коучинг команд разработки и коучинговые инструменты в работе тимлидаКоучинг команд разработки и коучинговые инструменты в работе тимлида
Коучинг команд разработки и коучинговые инструменты в работе тимлида
 
Взаимное влияние Source Code Management и других средств организации разработки
Взаимное влияние Source Code Management и других средств организации разработкиВзаимное влияние Source Code Management и других средств организации разработки
Взаимное влияние Source Code Management и других средств организации разработки
 
DevOPS инструменты для .NET проектов
DevOPS инструменты для .NET проектовDevOPS инструменты для .NET проектов
DevOPS инструменты для .NET проектов
 
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компанииДоски проектов и продуктов на TFS: Agile-визуализация на уровне компании
Доски проектов и продуктов на TFS: Agile-визуализация на уровне компании
 

Внедрение зависимостей в 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