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

PPTX
Андрей Завадский "Бессерверная архитектура"
PDF
Архитектурные решения при создании облачного сервиса на Asp.Net
PDF
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"
PPTX
ASP.NET MVC
PPTX
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
PDF
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
PPTX
ASP.NET MVC 3 Anton Vidishchev
PPTX
Что нового в Visual Studio 2013
Андрей Завадский "Бессерверная архитектура"
Архитектурные решения при создании облачного сервиса на Asp.Net
Дмитрий Немеш "Миграция нагруженного проекта на микросервисы"
ASP.NET MVC
Создаем масштабируемое корпоративное JavaScript-приложение, Влад Плотник
Специфика рендеринга vue.js-приложений на сервере, Алексей Клюев
ASP.NET MVC 3 Anton Vidishchev
Что нового в Visual Studio 2013

What's hot (14)

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

Viewers also liked (10)

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

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

PPTX
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
PDF
Inversion of Control в .NET
PPT
DI and Zend Framework (ZFConf2011)
PPT
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
PPTX
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PDF
Илья Ефимов «IoC/DI на примере Autofac»
PDF
Илья Ефимов «IoC/DI на примере Autofac»
PDF
IoC & Dependency Injection
PPTX
ASP.Net Core
PDF
Как это будет: ASP.NET Core
PDF
The Old New ASP.NET
PPT
ASP.NET MVC: new era?
PPTX
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
PPTX
ASP.NET, MVC, ASP.NET MVC
KEY
Ciklum Odessa PHP Saturday - Dependency Injection
PPTX
Референсная архитектура приложения на ASP.NET MVC
PDF
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
PPTX
Dependency injection
PDF
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...
Dependency Injection. Как сказать всё, не говоря ничего. Кожевников Дмитрий. ...
Inversion of Control в .NET
DI and Zend Framework (ZFConf2011)
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
IoC & Dependency Injection
ASP.Net Core
Как это будет: ASP.NET Core
The Old New ASP.NET
ASP.NET MVC: new era?
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
ASP.NET, MVC, ASP.NET MVC
Ciklum Odessa PHP Saturday - Dependency Injection
Референсная архитектура приложения на ASP.NET MVC
ASP.NET MVC за пределами Hello World. Дятлов Александр D2D Just.NET
Dependency injection
Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления п...

More from GoSharp (20)

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