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

Recommandé

Андрей Завадский "Бессерверная архитектура" par
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
730 vues39 diapositives
Архитектурные решения при создании облачного сервиса на Asp.Net par
Архитектурные решения при создании облачного сервиса на Asp.NetАрхитектурные решения при создании облачного сервиса на Asp.Net
Архитектурные решения при создании облачного сервиса на Asp.NetGoSharp
660 vues16 diapositives
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы" par
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"Fwdays
1.6K vues40 diapositives
ASP.NET MVC par
ASP.NET MVCASP.NET MVC
ASP.NET MVCGetDev.NET
784 vues21 diapositives
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник par
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникСоздаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Создаем масштабируемое корпоративное JavaScript-приложение, Влад ПлотникSigma Software
76 vues19 diapositives
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев par
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевСпецифика рендеринга vue.js-приложений на сервере, Алексей Клюев
Специфика рендеринга vue.js-приложений на сервере, Алексей КлюевMail.ru Group
2K vues42 diapositives

Contenu connexe

Tendances

Sergey Gavruk - Mix11 par
Sergey Gavruk - Mix11Sergey Gavruk - Mix11
Sergey Gavruk - Mix11beloslab
314 vues32 diapositives
Станислав Цыганов "SOA в iOS разработке" par
Станислав Цыганов "SOA в iOS разработке"Станислав Цыганов "SOA в iOS разработке"
Станислав Цыганов "SOA в iOS разработке"IT Event
1K vues115 diapositives
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од... par
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
1.2K vues28 diapositives
Будущее ASP.NET par
Будущее ASP.NETБудущее ASP.NET
Будущее ASP.NETGoSharp
948 vues16 diapositives
AntonSaburov (Gemini-Systems) @ CodeCamp2011 par
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011CodeCamp
280 vues8 diapositives
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий par
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
1K vues30 diapositives

Tendances(14)

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

En vedette

Рейтинг навыков .NET-разработчика par
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчикаgeekfamilyrussia
676 vues27 diapositives
Лучшие практики корпоративной разработки. Лекция 0: обзор курса. par
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
512 vues30 diapositives
ASP.NET Web API par
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
1.8K vues19 diapositives
Обзор технологических новинок в .Net с точки зрения Web-программиста par
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программистаMikhail Shcherbakov
546 vues13 diapositives
Асинхронное программирование в ASP.NET MVC par
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVCEugene Agafonov
1.1K vues28 diapositives
Математические основы методов решений систем логических уравнений par
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийOlga Maksimenkova
839 vues54 diapositives

En vedette(10)

Рейтинг навыков .NET-разработчика par geekfamilyrussia
Рейтинг навыков .NET-разработчикаРейтинг навыков .NET-разработчика
Рейтинг навыков .NET-разработчика
geekfamilyrussia676 vues
Лучшие практики корпоративной разработки. Лекция 0: обзор курса. par Vadim Martynov
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Vadim Martynov512 vues
ASP.NET Web API par GetDev.NET
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
GetDev.NET1.8K vues
Обзор технологических новинок в .Net с точки зрения Web-программиста par Mikhail Shcherbakov
Обзор технологических новинок в .Net с точки зрения Web-программистаОбзор технологических новинок в .Net с точки зрения Web-программиста
Обзор технологических новинок в .Net с точки зрения Web-программиста
Асинхронное программирование в ASP.NET MVC par Eugene Agafonov
Асинхронное программирование в ASP.NET MVCАсинхронное программирование в ASP.NET MVC
Асинхронное программирование в ASP.NET MVC
Eugene Agafonov1.1K vues
Математические основы методов решений систем логических уравнений par Olga Maksimenkova
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
Аспектно-ориентированный подход на службе веб-приложений par Alexander Byndyu
Аспектно-ориентированный подход на службе веб-приложенийАспектно-ориентированный подход на службе веб-приложений
Аспектно-ориентированный подход на службе веб-приложений
Alexander Byndyu434 vues
Javascript-фреймворки:
 должен остаться только один par Sergey Xek
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek1.7K vues

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

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25 par
"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 vues83 diapositives
redux: the best for isomorphic apps par
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
969 vues83 diapositives
ASP.NET, MVC, ASP.NET MVC par
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
2.6K vues29 diapositives
RST2014_Taganrog_IncodingFramework par
RST2014_Taganrog_IncodingFrameworkRST2014_Taganrog_IncodingFramework
RST2014_Taganrog_IncodingFrameworkRussianStartupTour
140 vues12 diapositives
ASP.NET MVC 3 par
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3Денис Резник
637 vues25 diapositives
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS par
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOS
2016-08-20 02 Антон Ковалев, Антон Кормаков. Viper. Чистая архитектура для iOSОмские ИТ-субботники
404 vues41 diapositives

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

"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25 par 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 vues
redux: the best for isomorphic apps par Denis Izmaylov
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
Denis Izmaylov969 vues
ASP.NET, MVC, ASP.NET MVC par GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K vues
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной... par Cisco Russia
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Быстрое создание облачного ЦОД на базе решения EMC HybridCloudи конвергентной...
Cisco Russia 504 vues
ПартФорум DIRECTUM 2013 - разработка прикладных решений par Виктор Золотов
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
Presentation par VasayXTX
PresentationPresentation
Presentation
VasayXTX175 vues
Виртуализация критически важных приложений par Jack Chikovany
Виртуализация критически важных приложенийВиртуализация критически важных приложений
Виртуализация критически важных приложений
Jack Chikovany586 vues
Как это будет: ASP.NET Core par DotNetConf
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
DotNetConf767 vues
Паттерны проектирования par ITCP Community
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
ITCP Community131 vues
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus... par Cisco Russia
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Сетевая инфраструктура ЦОД, ориентированная на приложения и коммутаторы Nexus...
Cisco Russia 945 vues
Обзор новых возможностей UCCX 10 par Cisco Russia
Обзор новых возможностей UCCX 10Обзор новых возможностей UCCX 10
Обзор новых возможностей UCCX 10
Cisco Russia 2K vues
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл... par Cisco Russia
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Unified Infrastructure Controller (Cloupia)- унифицированная консоль дл...
Cisco Russia 452 vues
Инновационное SDN решение для ЦОД Cisco ACI Anywhere par Cisco Russia
Инновационное SDN решение для ЦОД Cisco ACI AnywhereИнновационное SDN решение для ЦОД Cisco ACI Anywhere
Инновационное SDN решение для ЦОД Cisco ACI Anywhere
Cisco Russia 243 vues
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п... par Cisco Russia
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco ACI - инфраструктура, ориентированная на приложения: решаемые задачи, п...
Cisco Russia 2.3K vues
Готовим Docker для Автоматизации Тестирования par COMAQA.BY
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
COMAQA.BY 714 vues
Инфраструктура Cisco для построения облачной платформы par Cisco Russia
Инфраструктура Cisco для построения облачной платформыИнфраструктура Cisco для построения облачной платформы
Инфраструктура Cisco для построения облачной платформы
Cisco Russia 545 vues

Plus de GoSharp

TPL Dataflow – зачем и для кого? par
TPL Dataflow – зачем и для кого?TPL Dataflow – зачем и для кого?
TPL Dataflow – зачем и для кого?GoSharp
1.5K vues24 diapositives
Живые приложения с Rx par
Живые приложения с RxЖивые приложения с Rx
Живые приложения с RxGoSharp
682 vues32 diapositives
Anemic Domain Model - антипаттерн или SOLID? par
Anemic Domain Model - антипаттерн или SOLID?Anemic Domain Model - антипаттерн или SOLID?
Anemic Domain Model - антипаттерн или SOLID?GoSharp
1.3K vues16 diapositives
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в... par
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...
Эволюция пользовательского интерфейса бизнес-приложений: от DOSa через окна в...GoSharp
708 vues72 diapositives
UniversalApp "убийца" WPF или же это WPF+ ? par
UniversalApp "убийца" WPF или же это WPF+ ?UniversalApp "убийца" WPF или же это WPF+ ?
UniversalApp "убийца" WPF или же это WPF+ ?GoSharp
1.3K vues40 diapositives
UI тестирование WPF приложений в Дойче Банке par
UI тестирование WPF приложений в Дойче БанкеUI тестирование WPF приложений в Дойче Банке
UI тестирование WPF приложений в Дойче БанкеGoSharp
1K vues13 diapositives

Plus de GoSharp(20)

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

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