Продолжаем нашу рубрику на тему ASP.NET5 публикацией Виктора Коцюбана ( Гбдрм ) — Технический руководитель SoftServe. В этой статье Виктор поделится с вами подробностями о новой встроенной функции внедрения зависимостей в ASP.NET5. Предыдущие статьи рубрики всегда можно прочитать по ссылке.Теги: #Разработка веб-сайтов #.#aspnetcolumn — Владимир Юнев Внедрение зависимостей — одна из самых популярных и используемых форм инверсии управления, важный принцип ООП, позволяющий уменьшить связанность — взаимозависимость, взаимосвязанность модулей.
Во многих современных фреймворках внедрение зависимостей уже является частью самого фреймворка.Это большой плюс, поскольку у разработчиков есть встроенная возможность создавать компоненты, разрешать зависимости и предоставлять их другим компонентам по запросу, и это происходит внутри самой программной платформы.
Кроме того, внедрение зависимостей — один из основных принципов работы с платформой, незнание которого может привести к неэффективному использованию фреймворка и написанию хренового кода.
ASP.NET 5 имеет встроенную систему внедрения зависимостей.
Что он позволяет и чем он выделяется среди других подобных подходов, будет рассмотрено ниже.
Мы также постараемся использовать это на практике.
ASP.NET 5 находится в стадии бета-тестирования, и все описанное здесь может измениться до выхода финальной версии.
Например, не так давно произошли серьезные изменения в возможностях встраивания в свойства.
Но основная концепция и основные направления этого нововведения уже ясны.
Основы и регистрация услуг
Большинство необходимых вам зависимостей предназначены для представлений, контроллеров и т. д., реализованных как сервисы, поэтому сервис — это минимальная единица, которой управляет контейнер DI. Ключевые функции минималистичного контейнера ASP.NET 5 включены в интерфейс IServiceProvider. Единственным методом этого интерфейса является объект GetService(Type serviceType).Контейнер поддерживает 4 типа инициализации службы (4 типа области действия):
Регистрация сервисов осуществляется при старте приложения, в классе Startup, с помощью метода ConfigurationServices(IServiceCollection Services), а также в ServiceCollection имеются методы добавления сервиса с соответствующей областью действия (рис.
- Экземпляр – возвращается конкретный объект, за создание которого вы несете ответственность.
- Transient – каждый раз возвращается новый объект.
- Синглтон — всегда возвращает один и тот же объект.
- Scoped — эквивалент сиглетона, но в заданной области (например, в области запроса).
1).
Рисунок 1. — Диаграмма классов Пример использования методов расширения ServiceCollection:После регистрации сервисы доступны во всех классах, которые вызывались через DI, а также доступные в представлениях.public virtual void ConfigureServices(IServiceCollection services) { var settings = new Settings(); services.AddInstance(settings); services.AddScoped<IProductService, ProductService>(); services.AddSingleton<TestService>(); }
Реализация сервисов в контроллере
С реализацией в контроллерах все очень просто — происходит через конструктор контроллера.
public class HomeController : Controller { private readonly IApplicationEnvironment _appEnvironment; private readonly IProductService _productService; public HomeController(IProductService productService, IApplicationEnvironment appEnvironment) { _appEnvironment = appEnvironment; _productService = productService; } // .
}
И больше ничего делать не нужно.Зарегистрированные службы доступны как параметры конструктора.
Если мы используем EntityFramework в нашем приложении, то одной из первых зависимостей, о которых мы подумаем использовать DI, является DbContext. Это позволит нам писать код менее зависимый от DbContext, будет проще тестировать такой функционал и т.д. Пример: github.com/gbdrm/aspnet5/blob/master/src/aspnet5/Controllers/HomeController.cs#L12-L17
Встраивание в представления
Также есть интересная возможность использования зарегистрированных сервисов в представлениях (*.cshtml).
@model SomeViewModel @inject SomeContext SomeContext <h1>@SomeContext.PageTitle</h1> <!-- HTML -->
Директива @inject сообщает механизму представления, что мы хотим использовать сервис SomeContext. А в самом представлении уже можно использовать этот сервис, в данном случае свойство PageTitle. Помимо использования сервисов в представлениях, еще одним интересным нововведением являются типизированные настройки.Помимо регистрации сервисов, есть возможность «прописать» часть конфигурации, предварительно приведя эту конфигурацию к определенному типу, и сделать это можно всего за несколько строк кода.
Пример реализации типизированной конфигурации в представлении: github.com/gbdrm/aspnet5/commit/88dc1e708f89edfd30a55ae90265cde9074ae312
Внедрение в свойства и куда делся [Активировать]?
Раньше с помощью атрибута [Активировать] можно было вытащить соответствующую услугу для свойства.Но разработчики решили отказаться от этого.
Основными причинами этого были проблемы с совместимостью с другими библиотеками внедрения зависимостей, а также сложность отладки.
Об этом уже давно ведутся дискуссии, подробности можно прочитать здесь: github.com/aspnet/Mvc/issues/2151 , github.com/aspnet/Announcements/issues/28 Но все же остается возможность внедрения зависимостей через свойства — с помощью атрибута [FromServices].
Давайте создадим тестовый класс, добавим его в контейнер и попробуем реализовать в свойстве контроллера.
github.com/gbdrm/aspnet5/commit/3d09ef0c5b6d079884337a6e044262659a4f6250
Заключение
Внедрение зависимостей на уровне платформы — отличный механизм для унификации управления зависимостями.Реализация в ASP.NET 5 прозрачна и понятна, а настройка очень проста.
Несмотря на то, что реализация все еще находится в стадии бета-тестирования, большая часть функционала уже стабильна и готова к полноценной разработке.
Все исходные коды контейнеров доступны на GitHub – github.com/aspnet/DependencyInjection .
Работа еще продолжается, вы можете ознакомиться не только с функционалом, но и посмотреть, как создается часть платформы.
Если вы хотите узнать больше о внедрении зависимостей в asp.net 5, есть отличная статья (на английском языке): www.emadashi.com/2015/06/dependent-injection-in-asp-net-5-one-step-deeper .
Совет! А еще, если вас заинтересовала тема ASP.NET5, вы можете посмотреть примеры, попробовать что-то добавить самостоятельно или написать запрос на реализацию какого-то функционала в проекте с примерами: github.com/gbdrm/aspnet5Последние новости
Как вы уже знаете, Visual Studio 2015 была выпущена с ASP.NET5 Beta5. Подробности о том, что именно включено в выпуск Visual Studio, можно найти в этот блог .Выпущено обновление ASP.NET5 Beta6 со множеством изменений, улучшений и исправлений ошибок.
Подробности обновления можно найти в этом блоге .
Вы можете скачать обновление перейдите по этой ссылке .
Опубликовано планы выпустить версии платформы в ближайшие месяцы, пока не будет выпущена финальная версия ASP.NET5. По их словам, нас ждут версии Beta7 и Beta8, после чего в ноябре мы получим первую готовую к производству версию (RC1), финальная версия выйдет в первом квартале 2016 года.
Подробности о каждой версии можно узнать здесь.
связь .
Опубликованные отчеты Конференция DevCon 2015, включая веб-разработку и Тема ASP.NET .
Полезные ссылки
Последняя версия документации ASP.NET5 находится по адресу http://docs.asp.net/en/latest/ .Приглашаем вас настроиться на прямые трансляции периодического шоу Стенд сообщества ASP.NET 5 , где разработчики из команды Microsoft делятся последними новостями о платформе.
Доступные записи перейдите по этой ссылке .
Ознакомьтесь с новой статьей о разработке приложений ASP.NET в Visual Studio Code Рика Рейтана, в котором подробно описаны интересные аспекты работы с веб-проектами в VS Code. Изучите основы ASP.NET5 с помощью новый бесплатный курс Виртуальная академия Microsoft.
Авторам
Друзья, если вы заинтересованы поддержать рубрику собственным материалом, пишите мне на почту [email protected] чтобы обсудить все детали.Мы ищем авторов, которые смогут интересно рассказать об ASP.NET и других темах.
об авторе
Коцюбан Виктор Технический руководитель SoftServe Гбдрм .NET-разработчик с опытом работы более 8 лет. Специалист в области корпоративных веб-проектов.
Последние 4 года занимал должность технического руководителя.
В опросе могут участвовать только зарегистрированные пользователи.
Войти , Пожалуйста.
Будете ли вы использовать встроенный механизм внедрения зависимостей? 66,86% В большинстве случаев - да 113 8,88% В редких случаях 15 24,26% Скорее всего - нет, пользуюсь сторонним 41 Проголосовали 169 пользователей.
37 пользователей воздержались.
NET #Visual Studio #внедрение зависимостей #ASP.NET #ASP #ASP #внедрение зависимостей ##aspnetcolumn ##aspnetcolumn #asp.net 5
-
Vmware И Vsphere Для Образования
19 Oct, 24 -
Apple Ipad И Лучшие Аксессуары Для Ipad
19 Oct, 24 -
Все Основные Новинки Lenovo На Ifa 2015
19 Oct, 24 -
Библиотека Онлайн
19 Oct, 24 -
Web.2.0 – Как Создать Сообщество?
19 Oct, 24 -
Знаете Ли Вы, Что Такое Фидо?
19 Oct, 24