Внедрение зависимостей в ASP.NET MVC 4ASP.NET MVC 4 Dependency Injection

по Web Слышатся TeamBy Web Camps Team

Скачайте комплект учебных материалов по лагеря WebDownload Web Camps Training Kit

Это Практическое лабораторное занятие предполагается, что у вас есть базовые знания о ASP.NET MVC и фильтров ASP.NET MVC 4.This Hands-on Lab assumes you have basic knowledge of ASP.NET MVC and ASP.NET MVC 4 filters. Если вы не использовали фильтров ASP.NET MVC 4 раньше, мы рекомендуем к превышению настраиваемые действия ASP.NET MVC фильтры Практическое лабораторное занятие.If you have not used ASP.NET MVC 4 filters before, we recommend you to go over ASP.NET MVC Custom Action Filters Hands-on Lab.

Note

Все примеры кода и фрагменты кода включены в Web лагеря комплект обучающих материалов, доступных из в выпуски Microsoft Web/WebCampTrainingKit.All sample code and snippets are included in the Web Camps Training Kit, available from at Microsoft-Web/WebCampTrainingKit Releases. Проект, относящиеся к этой лаборатории доступен в внедрения зависимостей ASP.NET MVC 4.The project specific to this lab is available at ASP.NET MVC 4 Dependency Injection.

В объектно-ориентированного программирования парадигма, совместной работы объектов в модели совместной работы которых содержится участники и потребителей.In Object Oriented Programming paradigm, objects work together in a collaboration model where there are contributors and consumers. Естественно эта модель связи приводит к возникновению ошибки зависимости между объектами и компонентами, становится сложно управлять при увеличении сложности.Naturally, this communication model generates dependencies between objects and components, becoming difficult to manage when complexity increases.

Класс зависимостей и сложность моделиClass dependencies and model complexity

Класс зависимостей и сложность моделиClass dependencies and model complexity

Вы, вероятно, слышали о шаблон фабрики и разделение между интерфейсом и реализации, с помощью служб, где клиентские объекты часто отвечают за расположение службы.You have probably heard about the Factory Pattern and the separation between the interface and the implementation using services, where the client objects are often responsible for service location.

Шаблон внедрения зависимостей является конкретной реализацией Inversion of Control.The Dependency Injection pattern is a particular implementation of Inversion of Control. Инверсии управления (IoC) означает, что объекты не создавайте другие объекты, на которые они используют для выполнения своих задач.Inversion of Control (IoC) means that objects do not create other objects on which they rely to do their work. Вместо этого они получают объекты, которые им необходимы из внешнего источника (например, файл конфигурации xml).Instead, they get the objects that they need from an outside source (for example, an xml configuration file).

Внедрение зависимостей (DI) означает, что это сделать без вмешательства объекта, как правило, компонентом платформы, который передает параметры конструктора и задайте свойства.Dependency Injection (DI) means that this is done without the object intervention, usually by a framework component that passes constructor parameters and set properties.

Шаблон разработки внедрения зависимостейThe Dependency Injection (DI) Design Pattern

На высоком уровне, внедрение зависимостей призвано, класс клиента (например golfer) требуется что-нибудь, удовлетворяющий интерфейс (например IClub).At a high level, the goal of Dependency Injection is that a client class (e.g. the golfer) needs something that satisfies an interface (e.g. IClub). Безразлично, что такое конкретный тип (например WedgeClub WoodClub IronClub, или PutterClub), ему кто-то другой для обработки, (например хорошее caddy).It doesn't care what the concrete type is (e.g. WoodClub, IronClub, WedgeClub or PutterClub), it wants someone else to handle that (e.g. a good caddy). Сопоставитель зависимостей в ASP.NET MVC можно позволяют регистрировать логику зависимостей где-то еще (например контейнер или контейнер треф).The Dependency Resolver in ASP.NET MVC can allow you to register your dependency logic somewhere else (e.g. a container or a bag of clubs).

Схема внедрения зависимостейDependency Injection diagram

Внедрение зависимостей - аналогию GolfDependency Injection - Golf analogy

Ниже перечислены преимущества использования шаблон внедрения зависимостей и инверсии управления.The advantages of using Dependency Injection pattern and Inversion of Control are the following:

  • Уменьшает взаимозависимости классовReduces class coupling
  • Увеличивает повторное использование кодаIncreases code reusing
  • Повышает удобство поддержки кодаImproves code maintainability
  • Улучшает тестирования приложенийImproves application testing

Note

Внедрение зависимостей иногда сравнивается с абстрактным фабричного конструктивного шаблона, но есть незначительные различия между оба подхода.Dependency Injection is sometimes compared with Abstract Factory Design Pattern, but there is a slight difference between both approaches. DI имеет структуру, работа за устранить зависимости, вызов фабрики и зарегистрированных служб.DI has a Framework working behind to solve dependencies by calling the factories and the registered services.

Теперь, когда вы знаете шаблон внедрения зависимостей, вы узнаете в этом лабораторном занятии как применять их в ASP.NET MVC 4.Now that you understand the Dependency Injection Pattern, you will learn throughout this lab how to apply it in ASP.NET MVC 4. Сначала с помощью внедрения зависимости в контроллеров включена служба доступа к базе данных.You will start using Dependency Injection in the Controllers to include a database access service. После этого будет применить внедрение зависимостей для представления для использования службы и отображения сведений.Next, you will apply Dependency Injection to the Views to consume a service and show information. Наконец будут расширены внедрения Зависимостей в ASP.NET MVC 4 фильтры, внедрение пользовательского фильтра действий в решении.Finally, you will extend the DI to ASP.NET MVC 4 Filters, injecting a custom action filter in the solution.

В этом Практическое лабораторное занятие, вы узнаете, как:In this Hands-on Lab, you will learn how to:

  • Интеграция ASP.NET MVC 4 с Unity для внедрения зависимостей, использование пакетов NuGetIntegrate ASP.NET MVC 4 with Unity for Dependency Injection using NuGet Packages
  • С помощью внедрения зависимостей в контроллер ASP.NET MVCUse Dependency Injection inside an ASP.NET MVC Controller
  • С помощью внедрения зависимостей в представления ASP.NET MVCUse Dependency Injection inside an ASP.NET MVC View
  • С помощью внедрения зависимостей в ASP.NET MVC фильтра действийUse Dependency Injection inside an ASP.NET MVC Action Filter

Note

Это лабораторное занятие использует пакет NuGet Unity.Mvc3 для разрешения зависимостей, но можно адаптировать любой платформой внедрения зависимостей для работы с ASP.NET MVC 4.This Lab is using Unity.Mvc3 NuGet Package for dependency resolution, but it is possible to adapt any Dependency Injection Framework to work with ASP.NET MVC 4.

Предварительные требованияPrerequisites

Необходимо иметь следующие элементы во укомплектовать данную лабораторию:You must have the following items to complete this lab:

УстановкаSetup

Установка фрагменты кодаInstalling Code Snippets

Для удобства большая часть кода, который вы планируете управлять вдоль этой лаборатории доступен как фрагменты кода Visual Studio.For convenience, much of the code you will be managing along this lab is available as Visual Studio code snippets. Чтобы установить фрагменты кода запуска .\Source\Setup\CodeSnippets.vsi файла.To install the code snippets run .\Source\Setup\CodeSnippets.vsi file.

Если вы не знакомы с фрагменты кода Visual Studio и хотите научиться использовать их, можно ссылаться в приложение из этого документа " приложении б: Фрагменты кода".If you are not familiar with the Visual Studio Code Snippets, and want to learn how to use them, you can refer to the appendix from this document "Appendix B: Using Code Snippets".


УпражненияExercises

Это Практическое лабораторное занятие включает по следующие упражнения:This Hands-On Lab is comprised by the following exercises:

  1. Упражнение 1. Добавление контроллераExercise 1: Injecting a Controller
  2. Упражнение 2. Добавление представленияExercise 2: Injecting a View
  3. Упражнение 3. Добавление фильтровExercise 3: Injecting Filters

Note

Каждого упражнения сопровождается окончания папку, содержащую полученное решение, должен быть получен после завершения упражнения.Each exercise is accompanied by an End folder containing the resulting solution you should obtain after completing the exercises. Это решение можно использовать как руководство, если вам нужна дополнительная помощь при работе с примерами.You can use this solution as a guide if you need additional help working through the exercises.

Предполагаемое время для выполнения этого лабораторного: 30 минут.Estimated time to complete this lab: 30 minutes.

Упражнение 1. Добавление контроллераExercise 1: Injecting a Controller

В этом упражнении вы узнаете, как использовать внедрение зависимостей в ASP.NET MVC Controllers, интеграция Unity с помощью пакета NuGet.In this exercise, you will learn how to use Dependency Injection in ASP.NET MVC Controllers by integrating Unity using a NuGet Package. По этой причине службы будет включать в свои контроллеры MvcMusicStore для отделения логики от доступа к данным.For that reason, you will include services into your MvcMusicStore controllers to separate the logic from the data access. Службы создаст новую зависимость в конструктор контроллера, который будет разрешаться с использованием внедрения зависимостей с помощью Unity.The services will create a new dependency in the controller constructor, which will be resolved using Dependency Injection with the help of Unity.

Этот подход будет показано, как для создания менее связанных приложений, которые являются более гибкими и простыми в обслуживании и тестировании.This approach will show you how to generate less coupled applications, which are more flexible and easier to maintain and test. Вы также узнаете, как интегрировать ASP.NET MVC с помощью Unity.You will also learn how to integrate ASP.NET MVC with Unity.

Сведения о службе StoreManagerAbout StoreManager Service

Music Store MVC, теперь предоставляются в решении begin содержит службу, которая управляет данными Store контроллер с именем StoreService.The MVC Music Store provided in the begin solution now includes a service that manages the Store Controller data named StoreService. Ниже Вы найдете реализация службы Store.Below you will find the Store Service implementation. Обратите внимание, что все методы возвращают сущностей модели.Note that all the methods return Model entities.

namespace MvcMusicStore.Controllers
{    
    using System.Web.Mvc;
    using MvcMusicStore.Filters;
    using MvcMusicStore.Services;

    [MyNewCustomActionFilter(Order = 1)]
    [CustomActionFilter(Order = 2)]
    public class StoreController : Controller
    {
        private IStoreService service;

        public StoreController(IStoreService service)
        {
            this.service = service;
        }

        // GET: /Store/
        public ActionResult Details(int id)
        {
            var album = this.service.GetAlbum(id);
            if (album == null)
            {
                return this.HttpNotFound();
            }

            return this.View(album);
        }

        public ActionResult Browse(string genre)
        {
            // Retrieve Genre and its Associated Albums from database
            var genreModel = this.service.GetGenreByName(genre);

            return this.View(genreModel);
        }

        public ActionResult Index()
        {
            var genres = this.service.GetGenres();

            return this.View(genres);
        }

        // GET: /Store/GenreMenu
        public ActionResult GenreMenu()
        {
            var genres = this.service.GetGenres();

            return this.PartialView(genres);
        }
    }
}

StoreController из begin решение использует StoreService.StoreController from the begin solution now consumes StoreService. Все ссылки на данные были удалены из StoreControllerи теперь можно изменить текущий поставщик доступа к данным без изменения любой метод, который потребляет StoreService.All the data references were removed from StoreController, and now possible to modify the current data access provider without changing any method that consumes StoreService.

Вы найдете ниже, StoreController реализация имеет зависимость от StoreService внутри конструктора класса.You will find below that the StoreController implementation has a dependency with StoreService inside the class constructor.

Note

Зависимости, представленные в этом упражнении связана с Inversion of Control (IoC).The dependency introduced in this exercise is related to Inversion of Control (IoC).

StoreController конструктор класса получает IStoreService параметру типа, который необходим для выполнения вызовов службы от внутри класса.The StoreController class constructor receives an IStoreService type parameter, which is essential to perform service calls from inside the class. Тем не менее StoreController не реализован конструктор по умолчанию (с без параметров), любой контроллер для работы с ASP.NET MVC.However, StoreController does not implement the default constructor (with no parameters) that any controller must have to work with ASP.NET MVC.

Чтобы устранить зависимость, контроллер может создаваться фабрикой абстрактным (класс, который возвращает любой объект указанного типа).To resolve the dependency, the controller has to be created by an abstract factory (a class that returns any object of the specified type).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMusicStore.ViewModels;
using MvcMusicStore.Models;
using MvcMusicStore.Services;

namespace MvcMusicStore.Controllers
{
    public class StoreController : Controller
    {
        private IStoreService service;

        public StoreController(IStoreService service)
        {
            this.service = service;
        }

        //
        // GET: /Store/
        public ActionResult Index()
        {
            // Create list of genres
            var genres = this.service.GetGenreNames();

            // Create your view model
            var viewModel = new StoreIndexViewModel
            {
                Genres = genres.ToList(),
                NumberOfGenres = genres.Count()
            };

            return View(viewModel);
        }

        //
        // GET: /Store/Browse?genre=Disco
        public ActionResult Browse(string genre)
        {
            var genreModel = this.service.GetGenreByName(genre);

            var viewModel = new StoreBrowseViewModel()
            {
                Genre = genreModel,
                Albums = genreModel.Albums.ToList()
            };

            return View(viewModel);
        }

        //
        // GET: /Store/Details/5
        public ActionResult Details(int id)
        {
            var album = this.service.GetAlbum(id);

            return View(album);
        }
    }
}

Note

Вы получите ошибку при попытке создать StoreController без отправки объекта службы, так как не объявлен конструктор класса.You will get an error when the class tries to create the StoreController without sending the service object, as there is no parameterless constructor declared.

Задача 1 - Запуск приложенияTask 1 - Running the Application

В этой задаче будет выполняться приложения Begin, который включает в себя службу в контроллер Store отделяет доступа к данным от логики приложения.In this task, you will run the Begin application, which includes the service into the Store Controller that separates the data access from the application logic.

При запуске приложения, вы получите исключение, так как служба контроллера не передается в качестве параметра по умолчанию:When running the application, you will receive an exception, as the controller service is not passed as a parameter by default:

  1. Откройте начать решение находится в внедрение Source\Ex01 Controller\Begin.Open the Begin solution located in Source\Ex01-Injecting Controller\Begin.

    1. Необходимо будет загрузить некоторые отсутствующие пакеты NuGet прежде чем продолжить.You will need to download some missing NuGet packages before continue. Чтобы сделать это, нажмите кнопку проекта меню и выберите управление пакетами NuGet.To do this, click the Project menu and select Manage NuGet Packages.

    2. В управление пакетами NuGet диалоговое окно, нажмите кнопку восстановить чтобы скачивать отсутствующие пакеты.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. Наконец, постройте решение, нажав кнопку построения | построить решение.Finally, build the solution by clicking Build | Build Solution.

      Note

      Одним из преимуществ использования NuGet является отсутствие поставлять все библиотеки в проекте, уменьшив размер проекта.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. С помощью NuGet Power Tools путем указания версий пакета в файле Packages.config можно для скачивания всех необходимых библиотек при первом запуске проекта.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. Вот почему необходимо выполните описанные выше действия, после открытия существующего решения из этой лаборатории.This is why you will have to run these steps after you open an existing solution from this lab.

  2. Нажмите клавишу Ctrl + F5 для запуска приложения без отладки.Press Ctrl + F5 to run the application without debugging. Вы получите сообщение об ошибке " нет конструктора без параметров, определенных для данного объекта":You will get the error message "No parameterless constructor defined for this object":

    Ошибка при выполнении приложения начать ASP.NET MVCError while running ASP.NET MVC Begin Application

    Ошибка при выполнении приложения начать ASP.NET MVCError while running ASP.NET MVC Begin Application

  3. Закройте браузер.Close the browser.

В следующих шагах будет работать решение Music Store для внедрения зависимости, необходимые для этого контроллера.In the following steps you will work on the Music Store Solution to inject the dependency this controller needs.

Задача 2 - включая Unity в решение MvcMusicStoreTask 2 - Including Unity into MvcMusicStore Solution

В этой задаче будет включать Unity.Mvc3 пакет NuGet для решения.In this task, you will include Unity.Mvc3 NuGet Package to the solution.

Note

Пакет Unity.Mvc3 был разработан для ASP.NET MVC 3, но она полностью совместима с ASP.NET MVC 4.Unity.Mvc3 package was designed for ASP.NET MVC 3, but it is fully compatible with ASP.NET MVC 4.

Unity — это контейнер внедрения зависимостей облегченный и расширяемый с дополнительной поддержкой для экземпляра и типа.Unity is a lightweight, extensible dependency injection container with optional support for instance and type interception. Это контейнер общего назначения для использования в приложении .NET любого типа.It is a general-purpose container for use in any type of .NET application. Он предоставляет общие возможности, в том числе механизмы внедрения зависимостей: создание объектов, абстракции требований, указав зависимости во время выполнения и гибкость, за счет отсрочки конфигурация компонента в контейнер.It provides all the common features found in dependency injection mechanisms including: object creation, abstraction of requirements by specifying dependencies at runtime and flexibility, by deferring the component configuration to the container.

  1. Установка Unity.Mvc3 пакет NuGet в MvcMusicStore проекта.Install Unity.Mvc3 NuGet Package in the MvcMusicStore project. Чтобы сделать это, откройте консоль диспетчера пакетов из представление | Other Windows.To do this, open the Package Manager Console from View | Other Windows.

  2. Выполните следующую команду:Run the following command.

    PMCPMC

    Install-Package Unity.Mvc3
    

    Установка пакета NuGet Unity.Mvc3Installing Unity.Mvc3 NuGet Package

    Установка пакета NuGet Unity.Mvc3Installing Unity.Mvc3 NuGet Package

  3. Один раз Unity.Mvc3 установки пакета, просмотрите файлы и папки, она автоматически добавляется для упрощения конфигурации Unity.Once the Unity.Mvc3 package is installed, explore the files and folders it automatically adds in order to simplify Unity configuration.

    Установленный пакет Unity.Mvc3Unity.Mvc3 package installed

    Установленный пакет Unity.Mvc3Unity.Mvc3 package installed

Задача 3 - регистрация Unity в приложении Global.asax.cs_запускTask 3 - Registering Unity in Global.asax.cs Application_Start

В этой задаче вы обновите приложения_запустить метод находится в Global.asax.cs для вызова инициализатор загрузчика Unity и затем обновить регистрацию файл начального загрузчика Службы и контроллер, будет использоваться для внедрения зависимостей.In this task, you will update the Application_Start method located in Global.asax.cs to call the Unity Bootstrapper initializer and then, update the Bootstrapper file registering the Service and Controller you will use for Dependency Injection.

  1. Теперь будет подключить загрузчика, — это файл, который инициализирует контейнера Unity и Сопоставитель зависимостей.Now, you will hook up the Bootstrapper which is the file that initializes the Unity container and Dependency Resolver. Чтобы сделать это, откройте Global.asax.cs и добавьте следующий выделенный код в приложения_запустить метод.To do this, open Global.asax.cs and add the following highlighted code within the Application_Start method.

    (Code Snippet - лаборатории внедрения зависимостей ASP.NET - Ex01 - инициализировать Unity)(Code Snippet - ASP.NET Dependency Injection Lab - Ex01 - Initialize Unity)

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        Bootstrapper.Initialise();
    
        AppConfig.Configure();
    }
    
  2. Откройте Bootstrapper.cs файла.Open Bootstrapper.cs file.

  3. Включите следующие пространства имен: MvcMusicStore.Services и MusicStore.Controllers.Include the following namespaces: MvcMusicStore.Services and MusicStore.Controllers.

    (Code Snippet - ASP.NET внедрения зависимостей лаборатории - Ex01 - загрузчик, добавление пространств имен)(Code Snippet - ASP.NET Dependency Injection Lab - Ex01 - Bootstrapper Adding Namespaces)

    using System.Web.Mvc;
    using Microsoft.Practices.Unity;
    using Unity.Mvc3;
    using MvcMusicStore.Services;
    using MvcMusicStore.Controllers;
    
  4. Замените BuildUnityContainer метод содержимого следующим кодом, который регистрирует Store контроллера и службы Store.Replace BuildUnityContainer method's content with the following code that registers Store Controller and Store Service.

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex01 - Store Register контроллера и службы)(Code Snippet - ASP.NET Dependency Injection Lab - Ex01 - Register Store Controller and Service)

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
    
        container.RegisterType<IStoreService, StoreService>();
        container.RegisterType<IController, StoreController>("Store");
    
        return container;
    }
    

Задача 4 - запуск приложенияTask 4 - Running the Application

В этой задаче будет выполняться приложение, чтобы убедиться, что его можно загрузить теперь после включения Unity.In this task, you will run the application to verify that it can now be loaded after including Unity.

  1. Нажмите клавишу F5 для запуска приложения, приложения должен загружаться без отображения сообщения об ошибке.Press F5 to run the application, the application should now load without showing any error message.

    Запуск приложения с помощью внедрения зависимостейRunning Application with Dependency Injection

    Запуск приложения с помощью внедрения зависимостейRunning Application with Dependency Injection

  2. Перейдите к /Store.Browse to /Store. Это вызовет StoreController, который создается с помощью Unity.This will invoke StoreController, which is now created using Unity.

    MVC Music StoreMVC Music Store

    MVC Music StoreMVC Music Store

  3. Закройте браузер.Close the browser.

В следующих упражнениях вы узнаете, как расширить область внедрения зависимостей, чтобы использовать его внутри представлений MVC ASP.NET и фильтры действий.In the following exercises you will learn how to extend the Dependency Injection scope to use it inside ASP.NET MVC Views and Action Filters.

Упражнение 2. Добавление представленияExercise 2: Injecting a View

В этом упражнении вы узнаете, как использовать внедрение зависимостей в представления с новыми функциями ASP.NET MVC 4 для интеграции с Unity.In this exercise, you will learn how to use Dependency Injection in a view with the new features of ASP.NET MVC 4 for Unity integration. Для этого будет вызывать пользовательскую службу внутри представление Обзор Store, которое будет отображаться сообщение и изображение ниже.In order to do that, you will call a custom service inside the Store Browse View, which will show a message and an image below.

Затем следует интегрировать с помощью Unity и создать пользовательскую зависимость Сопоставитель для внедрения зависимостей.Then, you will integrate the project with Unity and create a custom dependency resolver to inject the dependencies.

Задача 1 - Создание представления, использующее службуTask 1 - Creating a View that Consumes a Service

В этой задаче вы создадите представление, которое выполняет вызов службы для создания новой зависимости.In this task, you will create a view that performs a service call to generate a new dependency. Служба состоит в простую службу обмена сообщениями, входят в это решение.The service consists in a simple messaging service included in this solution.

  1. Откройте начать решение находится в внедрение Source\Ex02 View\Begin папки.Open the Begin solution located in the Source\Ex02-Injecting View\Begin folder. В противном случае можно продолжить использование окончания решение получен путем выполнения предыдущего упражнения.Otherwise, you might continue using the End solution obtained by completing the previous exercise.

    1. Если вы открыли предоставленный начать решение, необходимо будет загрузить некоторые отсутствующие пакеты NuGet прежде чем продолжить.If you opened the provided Begin solution, you will need to download some missing NuGet packages before continue. Чтобы сделать это, нажмите кнопку проекта меню и выберите управление пакетами NuGet.To do this, click the Project menu and select Manage NuGet Packages.

    2. В управление пакетами NuGet диалоговое окно, нажмите кнопку восстановить чтобы скачивать отсутствующие пакеты.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. Наконец, постройте решение, нажав кнопку построения | построить решение.Finally, build the solution by clicking Build | Build Solution.

      Note

      Одним из преимуществ использования NuGet является отсутствие поставлять все библиотеки в проекте, уменьшив размер проекта.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. С помощью NuGet Power Tools путем указания версий пакета в файле Packages.config можно для скачивания всех необходимых библиотек при первом запуске проекта.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. Вот почему необходимо выполните описанные выше действия, после открытия существующего решения из этой лаборатории.This is why you will have to run these steps after you open an existing solution from this lab.

      Дополнительные сведения см. в этой статье: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages .For more information, see this article: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Включить MessageService.cs и IMessageService.cs классы находятся в источника \Assets папку в /службы.Include the MessageService.cs and the IMessageService.cs classes located in the Source \Assets folder in /Services. Чтобы сделать это, щелкните правой кнопкой мыши служб папку и выберите добавить существующий элемент.To do this, right-click Services folder and select Add Existing Item. Перейдите в расположение файлов и включать их.Browse to the files' location and include them.

    Добавление службы сообщений и интерфейс службыAdding Message Service and Service Interface

    Добавление службы сообщений и интерфейс службыAdding Message Service and Service Interface

    Note

    IMessageService интерфейс определяет два свойства, реализуемый MessageService класса.The IMessageService interface defines two properties implemented by the MessageService class. Эти свойства —сообщение и ImageUrl-хранить сообщение и URL-адрес изображения для отображения.These properties -Message and ImageUrl- store the message and the URL of the image to be displayed.

  3. Создать папку /Pages в проекте корневой папки, а затем добавьте существующий класс MyBasePage.cs из Source\Assets.Create the folder /Pages in the project's root folder, and then add the existing class MyBasePage.cs from Source\Assets. Основной страницы, который будет наследовать от имеет следующую структуру.The base page you will inherit from has the following structure.

    Папка страницPages folder

    namespace MvcMusicStore.Pages
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using Microsoft.Practices.Unity;
        using MvcMusicStore.Models;
        using MvcMusicStore.Services;
    
        public class MyBasePage : System.Web.Mvc.WebViewPage<Genre>
        {
            [Dependency]
            public IMessageService MessageService { get; set; }
    
            public override void 
    
            Execute()
            {
            }
        }
    }
    
  4. Откройте Browse.cshtml просмотра из /Views/Store папки и сделать ее от MyBasePage.cs.Open Browse.cshtml view from /Views/Store folder, and make it inherit from MyBasePage.cs.

    @inherits MvcMusicStore.Pages.MyBasePage
    @{
         ViewBag.Title = "Browse Albums";
    }
    
  5. В Обзор просмотреть, добавить вызов MessageService для отображения изображения и сообщение извлечено службой.In the Browse view, add a call to MessageService to display an image and a message retrieved by the service. (C#)(C#)

    @inherits MvcMusicStore.Pages.MyBasePage    
    @{
        Viewbag.Title = "Browse Albums";
    }
    <div>
        @this.MessageService.Message
        <br />
        <img alt="@this.MessageService.Message" src="@this.MessageService.ImageUrl" />
    </div>
    ...
    

Задача 2 - включая арбитра пользовательскую зависимость и активатор страницы представленияTask 2 - Including a Custom Dependency Resolver and a Custom View Page Activator

В предыдущей задаче вы добавили новую зависимость внутри представления для выполнения вызова службы внутри него.In the previous task, you injected a new dependency inside a view to perform a service call inside it. Теперь эту зависимость разрешит путем реализации интерфейсов внедрения зависимостей ASP.NET MVC IViewPageActivator и IDependencyResolver.Now, you will resolve that dependency by implementing the ASP.NET MVC Dependency Injection interfaces IViewPageActivator and IDependencyResolver. В решении будет включать реализацию IDependencyResolver , обеспечит получение службы с помощью Unity.You will include in the solution an implementation of IDependencyResolver that will deal with the service retrieval by using Unity. То, будет включать другой пользовательской реализации IViewPageActivator интерфейс, который решит создавать представления.Then, you will include another custom implementation of IViewPageActivator interface that will solve the creation of the views.

Note

С момента ASP.NET MVC 3 реализацию для внедрения зависимостей упрощена интерфейсы для регистрации службы.Since ASP.NET MVC 3, the implementation for Dependency Injection had simplified the interfaces to register services. IDependencyResolver и IViewPageActivator являются частью функции ASP.NET MVC 3 для внедрения зависимостей.IDependencyResolver and IViewPageActivator are part of ASP.NET MVC 3 features for Dependency Injection.

-IDependencyResolver интерфейс заменяет предыдущие IMvcServiceLocator.- IDependencyResolver interface replaces the previous IMvcServiceLocator. Объекты, реализующие IDependencyResolver должен возвращать экземпляр службы или службы коллекции.Implementers of IDependencyResolver must return an instance of the service or a service collection.

public interface IDependencyResolver {
    object GetService(Type serviceType);
    IEnumerable<object> GetServices(Type serviceType);
}

-IViewPageActivator интерфейс обеспечивает более точный контроль над как просмотреть страницы создаются посредством внедрения зависимостей.- IViewPageActivator interface provides more fine-grained control over how view pages are instantiated via dependency injection. Классы, реализующие IViewPageActivator интерфейс можно создавать экземпляры представления, используя информацию о контексте.The classes that implement IViewPageActivator interface can create view instances using context information.

public interface IViewPageActivator {
    object Create(ControllerContext controllerContext, Type type);
}
  1. Создать /фабрик папку в корневой папке проекта.Create the /Factories folder in the project's root folder.

  2. Включить CustomViewPageActivator.cs в решение из /источники/ресурсы/ для фабрик папки.Include CustomViewPageActivator.cs to your solution from /Sources/Assets/ to Factories folder. Чтобы сделать это, щелкните правой кнопкой мыши /Factories папку, выберите Add | Существующий элемент , а затем выберите CustomViewPageActivator.cs.To do that, right-click the /Factories folder, select Add | Existing Item and then select CustomViewPageActivator.cs. Этот класс реализует IViewPageActivator интерфейс для хранения контейнера Unity.This class implements the IViewPageActivator interface to hold the Unity Container.

    namespace MvcMusicStore.Factories
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.Mvc;
        using Microsoft.Practices.Unity;
    
        public class CustomViewPageActivator : IViewPageActivator
        {
            private IUnityContainer container;
    
            public CustomViewPageActivator(IUnityContainer container)
            {
                this.container = container;
            }
    
            public object Create(ControllerContext controllerContext, Type type)
            {
                return this.container.Resolve(type);
            }
        }
    }
    

    Note

    CustomViewPageActivator отвечает за управление созданием представления с помощью Unity-контейнера.CustomViewPageActivator is responsible for managing the creation of a view by using a Unity container.

  3. Включить UnityDependencyResolver.cs файла из /источники/активы для /Factories папки.Include UnityDependencyResolver.cs file from /Sources/Assets to /Factories folder. Чтобы сделать это, щелкните правой кнопкой мыши /Factories папку, выберите Add | Существующий элемент , а затем выберите UnityDependencyResolver.cs файла.To do that, right-click the /Factories folder, select Add | Existing Item and then select UnityDependencyResolver.cs file.

    namespace MvcMusicStore.Factories
    {
         using System;
         using System.Collections.Generic;
         using System.Linq;
         using System.Web;
         using System.Web.Mvc;
         using Microsoft.Practices.Unity;
    
         public class UnityDependencyResolver : IDependencyResolver
         {
              private IUnityContainer container;
    
              private IDependencyResolver resolver;
    
              public UnityDependencyResolver(IUnityContainer container, IDependencyResolver resolver)
              {
                    this.container = container;
                    this.resolver = resolver;
              }
    
              public object GetService(Type serviceType)
              {
                    try
                    {
                         return this.container.Resolve(serviceType);
                    }
                    catch
                    {
                         return this.resolver.GetService(serviceType);
                    }
              }
    
              public IEnumerable<object> GetServices(Type serviceType)
              {
                    try
                    {
                         return this.container.ResolveAll(serviceType);
                    }
                    catch
                    {
                         return this.resolver.GetServices(serviceType);
                    }
              }
         }
    }
    

    Note

    UnityDependencyResolver класс является пользовательских DependencyResolver для Unity.UnityDependencyResolver class is a custom DependencyResolver for Unity. Если службу не удается найти внутри контейнера Unity, является invocated базового сопоставителя.When a service cannot be found inside the Unity container, the base resolver is invocated.

В следующей задаче будет зарегистрирован обе реализации позволяет знать расположение службы и представления модели.In the following task both implementations will be registered to let the model know the location of the services and the views.

Задача 3 - регистрация для внедрения зависимости в пределах контейнера UnityTask 3 - Registering for Dependency Injection within Unity container

В этой задаче будет поместить все предыдущие друг с другом, чтобы сделать работать внедрения зависимостей, что.In this task, you will put all the previous things together to make Dependency Injection work.

Пока решение содержит следующие элементы:Up to now your solution has the following elements:

  • Объект Обзор представление, которое наследует от MyBaseClass с помощью модификатора и использует MessageService.A Browse View that inherits from MyBaseClass and consumes MessageService.
  • Промежуточный класс -MyBaseClass с помощью модификатора-с внедрения зависимостей, объявленным для интерфейса службы.An intermediate class -MyBaseClass- that has dependency injection declared for the service interface.
  • Службы - MessageService - и его интерфейс IMessageService.A service - MessageService - and its interface IMessageService.
  • Сопоставитель пользовательскую зависимость для Unity — UnityDependencyResolver -имеет дело с получения службы.A custom dependency resolver for Unity - UnityDependencyResolver - that deals with service retrieval.
  • Активатор страницы представления - CustomViewPageActivator -, создает страницу.A View Page activator - CustomViewPageActivator - that creates the page.

Чтобы внедрить Обзор представление, вы теперь регистрирует Сопоставитель пользовательскую зависимость в контейнера Unity.To inject Browse View, you will now register the custom dependency resolver in the Unity container.

  1. Откройте Bootstrapper.cs файла.Open Bootstrapper.cs file.

  2. Регистрация экземпляра MessageService в контейнер Unity инициализировать службу:Register an instance of MessageService into the Unity container to initialize the service:

    (Code Snippet - службу сообщения Register лаборатории - Ex02 - внедрения зависимостей ASP.NET)(Code Snippet - ASP.NET Dependency Injection Lab - Ex02 - Register Message Service)

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
    
        container.RegisterType<IStoreService, StoreService>();
        container.RegisterType<IController, StoreController>("Store");
    
        container.RegisterInstance<IMessageService>(new MessageService
        {
            Message = "You are welcome to our Web Camps Training Kit!",
            ImageUrl = "/Content/Images/webcamps.png"
        });
        //...
    }
    
  3. Добавьте ссылку на MvcMusicStore.Factories пространства имен.Add a reference to MvcMusicStore.Factories namespace.

    (Code Snippet - пространство имен фабрик лаборатории - Ex02 - внедрения зависимостей ASP.NET)(Code Snippet - ASP.NET Dependency Injection Lab - Ex02 - Factories Namespace)

    using System.Web.Mvc; 
    using Microsoft.Practices.Unity; 
    using Unity.Mvc3; 
    using MvcMusicStore.Services; 
    using MvcMusicStore.Controllers; 
    using MvcMusicStore.Factories;
    
  4. Зарегистрировать CustomViewPageActivator как активатор страницы представления в контейнер Unity:Register CustomViewPageActivator as a View Page activator into the Unity container:

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex02 - Register CustomViewPageActivator)(Code Snippet - ASP.NET Dependency Injection Lab - Ex02 - Register CustomViewPageActivator)

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
    
        container.RegisterType<IStoreService, StoreService>();
        container.RegisterType<IController, StoreController>("Store");
    
        container.RegisterInstance<IMessageService>(new MessageService
        {
            Message = "You are welcome to our Web Camps Training Kit!",
            ImageUrl = "/Content/Images/webcamps.png"
        });
    
        container.RegisterType<IViewPageActivator, CustomViewPageActivator>(new InjectionConstructor(container));
    
        return container;
    }
    
  5. Замените экземпляр сопоставителя зависимостей по умолчанию ASP.NET MVC 4 UnityDependencyResolver.Replace ASP.NET MVC 4 default dependency resolver with an instance of UnityDependencyResolver. Чтобы сделать это, замените инициализировать метод содержимого следующим кодом:To do this, replace Initialize method content with the following code:

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex02 - обновления Сопоставитель зависимостей)(Code Snippet - ASP.NET Dependency Injection Lab - Ex02 - Update Dependency Resolver)

    public static void Initialise()
    {
        var container = BuildUnityContainer();
    
        DependencyResolver.SetResolver(new Unity.Mvc3.UnityDependencyResolver(container));
    
        IDependencyResolver resolver = DependencyResolver.Current;
    
        IDependencyResolver newResolver = new Factories.UnityDependencyResolver(container, resolver);
    
        DependencyResolver.SetResolver(newResolver);
    }
    

    Note

    ASP.NET MVC предоставляет класс Сопоставитель зависимостей по умолчанию.ASP.NET MVC provides a default dependency resolver class. Для работы с сопоставителей пользовательских зависимостей, которое мы создали для unity, должно быть заменено данным сопоставителем.To work with custom dependency resolvers as the one we have created for unity, this resolver has to be replaced.

Задача 4 - запуск приложенияTask 4 - Running the Application

В этой задаче будет выполняться приложение, чтобы убедиться, что браузер Store использует службу и показано изображение и сообщение, полученное:In this task, you will run the application to verify that the Store Browser consumes the service and shows the image and the message retrieved:

  1. Нажмите клавишу F5 для запуска приложения.Press F5 to run the application.

  2. Нажмите кнопку рок в меню жанров и см. в разделе как MessageService был внедрен в представление и загружаются приветственное сообщение и изображения.Click Rock within the Genres Menu and see how the MessageService was injected to the view and loaded the welcome message and the image. В этом примере выполняется переход к " рок":In this example, we are entering to "Rock":

    MVC Music Store - внедрения представленияMVC Music Store - View Injection

    MVC Music Store - внедрения представленияMVC Music Store - View Injection

  3. Закройте браузер.Close the browser.

Упражнение 3. Добавление фильтров действийExercise 3: Injecting Action Filters

В предыдущей практической работу настраиваемые фильтры действий вы работали с настройки фильтров и внедрения.In the previous Hands-On lab Custom Action Filters you have worked with filters customization and injection. В этом упражнении вы узнаете, как внедрить фильтры с помощью внедрения зависимостей с помощью контейнера Unity.In this exercise, you will learn how to inject filters with Dependency Injection by using the Unity container. Чтобы сделать это, будет добавлен в решение Music Store пользовательского фильтра действий, будет отслеживать веб-узла.To do that, you will add to the Music Store solution a custom action filter that will trace the activity of the site.

Задача 1 - Включение отслеживания фильтра в решениеTask 1 - Including the Tracking Filter in the Solution

В этой задаче будут включены в Music Store пользовательского фильтра действий для события трассировки.In this task, you will include in the Music Store a custom action filter to trace events. Основные понятия как пользовательского фильтра действий, всегда обрабатываются в предыдущем лаборатории "пользовательских фильтров действий", необходимо просто добавить класс фильтра из папки Assets данную лабораторию и затем создать поставщик фильтра для Unity:As custom action filter concepts are already treated in the previous Lab "Custom Action Filters", you will just include the filter class from the Assets folder of this lab, and then create a Filter Provider for Unity:

  1. Откройте начать решение находится в Source\Ex03 - внедрение Filter\Begin действие папки.Open the Begin solution located in the Source\Ex03 - Injecting Action Filter\Begin folder. В противном случае можно продолжить использование окончания решение получен путем выполнения предыдущего упражнения.Otherwise, you might continue using the End solution obtained by completing the previous exercise.

    1. Если вы открыли предоставленный начать решение, необходимо будет загрузить некоторые отсутствующие пакеты NuGet прежде чем продолжить.If you opened the provided Begin solution, you will need to download some missing NuGet packages before continue. Чтобы сделать это, нажмите кнопку проекта меню и выберите управление пакетами NuGet.To do this, click the Project menu and select Manage NuGet Packages.

    2. В управление пакетами NuGet диалоговое окно, нажмите кнопку восстановить чтобы скачивать отсутствующие пакеты.In the Manage NuGet Packages dialog, click Restore in order to download missing packages.

    3. Наконец, постройте решение, нажав кнопку построения | построить решение.Finally, build the solution by clicking Build | Build Solution.

      Note

      Одним из преимуществ использования NuGet является отсутствие поставлять все библиотеки в проекте, уменьшив размер проекта.One of the advantages of using NuGet is that you don't have to ship all the libraries in your project, reducing the project size. С помощью NuGet Power Tools путем указания версий пакета в файле Packages.config можно для скачивания всех необходимых библиотек при первом запуске проекта.With NuGet Power Tools, by specifying the package versions in the Packages.config file, you will be able to download all the required libraries the first time you run the project. Вот почему необходимо выполните описанные выше действия, после открытия существующего решения из этой лаборатории.This is why you will have to run these steps after you open an existing solution from this lab.

      Дополнительные сведения см. в этой статье: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages .For more information, see this article: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages.

  2. Включить TraceActionFilter.cs файла из /источники/активы для /фильтрует папки.Include TraceActionFilter.cs file from /Sources/Assets to /Filters folder.

    namespace MvcMusicStore.Filters
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.Mvc;
    
        public class TraceActionFilter : IActionFilter
        {
            public void OnActionExecuted(ActionExecutedContext filterContext)
            {
                filterContext.HttpContext.Trace.Write("OnActionExecuted");
                filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName);
                filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
            }
    
            public void OnActionExecuting(ActionExecutingContext filterContext)
            {
                filterContext.HttpContext.Trace.Write("OnActionExecuting");
                filterContext.HttpContext.Trace.Write("Action " + filterContext.ActionDescriptor.ActionName);
                filterContext.HttpContext.Trace.Write("Controller " + filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
            }
        }
    }
    

    Note

    Этот фильтр настраиваемое действие выполняет трассировку ASP.NET.This custom action filter performs ASP.NET tracing. Вы можете проверить "локальный ASP.NET MVC 4 и динамические фильтры операций" лаборатории для Дополнительные ссылки.You can check "ASP.NET MVC 4 local and Dynamic Action Filters" Lab for more reference.

  3. Добавьте пустой класс FilterProvider.cs в проект в папке /фильтры.Add the empty class FilterProvider.cs to the project in the folder /Filters.

  4. Добавить System.Web.Mvc и Microsoft.Practices.Unity пространств имен в FilterProvider.cs.Add the System.Web.Mvc and Microsoft.Practices.Unity namespaces in FilterProvider.cs.

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex03 - фильтр поставщика добавление пространств имен)(Code Snippet - ASP.NET Dependency Injection Lab - Ex03 - Filter Provider Adding Namespaces)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Microsoft.Practices.Unity;
    
    namespace MvcMusicStore.Filters
    {
         public class FilterProvider
         {
         }
    }
    
  5. Сделайте соответствующие классы наследуют от IFilterProvider интерфейс.Make the class inherit from IFilterProvider Interface.

    namespace MvcMusicStore.Filters
    {
        public class FilterProvider : IFilterProvider
        {
        }
    }
    
  6. Добавить IUnityContainer свойство в FilterProvider класса, а затем создать конструктор класса, чтобы назначить контейнера.Add a IUnityContainer property in the FilterProvider class, and then create a class constructor to assign the container.

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex03 - фильтр поставщика конструктор)(Code Snippet - ASP.NET Dependency Injection Lab - Ex03 - Filter Provider Constructor)

    public class FilterProvider : IFilterProvider
    {
        private IUnityContainer container;
    
        public FilterProvider(IUnityContainer container)
        {
            this.container = container;
        }
    }
    

    Note

    Конструктор класса поставщика фильтра не создаете новый объекта внутри.The filter provider class constructor is not creating a new object inside. Контейнера передается в качестве параметра, а зависимость решается путем Unity.The container is passed as a parameter, and the dependency is solved by Unity.

  7. В FilterProvider , следует реализовать метод GetFilters из IFilterProvider интерфейс.In the FilterProvider class, implement the method GetFilters from IFilterProvider interface.

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex03 - фильтр поставщика GetFilters)(Code Snippet - ASP.NET Dependency Injection Lab - Ex03 - Filter Provider GetFilters)

    public class FilterProvider : IFilterProvider
    {
        private IUnityContainer container;
    
        public FilterProvider(IUnityContainer container)
        {
            this.container = container;
        }
    
        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
        {
            foreach (IActionFilter actionFilter in this.container.ResolveAll<IActionFilter>())
            {
                yield return new Filter(actionFilter, FilterScope.First, null);
            }
        }
    }
    

Задача 2 - регистрация и включение фильтраTask 2 - Registering and Enabling the Filter

В этой задаче будет включить отслеживание сайта.In this task, you will enable site tracking. Чтобы сделать это, вы будете регистрировать фильтр в Bootstrapper.cs BuildUnityContainer метод для запуска трассировки:To do that, you will register the filter in Bootstrapper.cs BuildUnityContainer method to start tracing:

  1. Откройте Web.config в корневую папку проекта и Включение отслеживания трассировки в группе System.Web.Open Web.config located in the project root and enable trace tracking at System.Web group.

    <system.web>
        <trace enabled="true"/>
        <compilation debug="true" targetFramework="4.5">
    
  2. Откройте Bootstrapper.cs в корневом каталоге проекта.Open Bootstrapper.cs at project root.

  3. Добавьте ссылку на MvcMusicStore.Filters пространства имен.Add a reference to the MvcMusicStore.Filters namespace.

    (Code Snippet - ASP.NET внедрения зависимостей лаборатории - Ex03 - загрузчик, добавление пространств имен)(Code Snippet - ASP.NET Dependency Injection Lab - Ex03 - Bootstrapper Adding Namespaces)

    using System.Web.Mvc;
    using Microsoft.Practices.Unity;
    using Unity.Mvc3;
    using MvcMusicStore.Services;
    using MvcMusicStore.Controllers;
    using MvcMusicStore.Factories;
    using MvcMusicStore.Filters;
    
  4. Выберите BuildUnityContainer метод и регистрация фильтра в контейнера Unity.Select the BuildUnityContainer method and register the filter in the Unity Container. Вам будет необходимо зарегистрировать у поставщика фильтров, а также действие фильтра.You will have to register the filter provider as well as the action filter.

    (Code Snippet - ASP.NET зависимостей путем внедрения кода лаборатории - Ex03 - Register FilterProvider и ActionFilter)(Code Snippet - ASP.NET Dependency Injection Lab - Ex03 - Register FilterProvider and ActionFilter)

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
    
        //...
    
        container.RegisterInstance<IFilterProvider>("FilterProvider", new FilterProvider(container));
        container.RegisterInstance<IActionFilter>("LogActionFilter", new TraceActionFilter());
    
        return container;
    }
    

Задача 3 - запуск приложенияTask 3 - Running the Application

В этой задаче будет запустить приложение и проверить, что настраиваемого фильтра действий является трассировка действия:In this task, you will run the application and test that the custom action filter is tracing the activity:

  1. Нажмите клавишу F5 для запуска приложения.Press F5 to run the application.

  2. Нажмите кнопку рок меню жанров.Click Rock within the Genres Menu. Если вы хотите можно просмотреть дополнительные жанров.You can browse to more genres if you want to.

    Music StoreMusic Store

    Приложение Music StoreMusic Store

  3. Перейдите к /Trace.axd для просмотра трассировки приложения странице, а затем выберите Просмотр сведений о.Browse to /Trace.axd to see the Application Trace page, and then click View Details.

    Журнал трассировки приложенияApplication Trace Log

    Журнал трассировки приложенияApplication Trace Log

    Трассировка приложения — сведения о запросеApplication Trace - Request Details

    Трассировка приложения — сведения о запросеApplication Trace - Request Details

  4. Закройте браузер.Close the browser.


СводкаSummary

Выполнив этот практический семинар вы узнали, как использовать внедрение зависимостей в ASP.NET MVC 4, интеграция Unity с помощью пакета NuGet.By completing this Hands-On Lab you have learned how to use Dependency Injection in ASP.NET MVC 4 by integrating Unity using a NuGet Package. Чтобы добиться этого, вы использовали внедрение зависимостей в контроллеры, представления и фильтры действий.To achieve that, you have used Dependency Injection inside controllers, views and action filters.

Охваченных следующие понятия:The following concepts were covered:

  • Функции внедрения зависимостей ASP.NET MVC 4ASP.NET MVC 4 Dependency Injection features
  • Интеграция с Unity с помощью пакета NuGet Unity.Mvc3Unity integration using Unity.Mvc3 NuGet Package
  • Внедрение зависимостей в контроллерыDependency Injection in Controllers
  • Внедрение зависимостей в представленияDependency Injection in Views
  • Внедрение зависимостей фильтров действийDependency injection of Action Filters

Приложение а. Установка Visual Studio Express 2012 для WebAppendix A: Installing Visual Studio Express 2012 for Web

Вы можете установить Microsoft Visual Studio Express 2012 для Web или другой "Express" версию с помощью Microsoft Web Platform Installer.You can install Microsoft Visual Studio Express 2012 for Web or another "Express" version using the Microsoft Web Platform Installer. Приведенные ниже инструкции описывают действия, необходимые для установки Visual studio Express 2012 для Web с помощью Microsoft Web Platform Installer.The following instructions guide you through the steps required to install Visual studio Express 2012 for Web using Microsoft Web Platform Installer.

  1. Перейдите по адресу https://go.microsoft.com/?linkid=9810169.Go to https://go.microsoft.com/?linkid=9810169. Кроме того, если вы уже установили установщика веб-платформы, можно открыть его и выполните поиск продукта " Visual Studio Express 2012 для Web с пакетом Windows Azure SDK".Alternatively, if you already have installed Web Platform Installer, you can open it and search for the product "Visual Studio Express 2012 for Web with Windows Azure SDK".

  2. Щелкните установить сейчас.Click on Install Now. Если у вас нет установщика веб-платформы вы будете перенаправлены к сначала загрузить и установить его.If you do not have Web Platform Installer you will be redirected to download and install it first.

  3. Один раз установщика веб-платформы открыт, нажмите кнопку установить для запуска программы установки.Once Web Platform Installer is open, click Install to start the setup.

    Установка Visual Studio ExpressInstall Visual Studio Express

    Установка Visual Studio ExpressInstall Visual Studio Express

  4. Прочтите лицензии и условия все продукты и нажмите кнопку я принимаю для продолжения.Read all the products' licenses and terms and click I Accept to continue.

    Принятие условий лицензии

    Принятие условий лицензииAccepting the license terms

  5. Подождите, пока не завершится процесс загрузки и установки.Wait until the downloading and installation process completes.

    Ход установки

    Ход выполнения установкиInstallation progress

  6. После завершения установки нажмите кнопку Готово.When the installation completes, click Finish.

    Установка завершена

    Установка завершенаInstallation completed

  7. Нажмите кнопку выхода закрыть установщик веб-платформы.Click Exit to close Web Platform Installer.

  8. Чтобы открыть Visual Studio Express для Web, перейдите к запустить экрана и Займитесь написанием " VS Express", нажмите кнопку на VS Express для Web Плитка.To open Visual Studio Express for Web, go to the Start screen and start writing "VS Express", then click on the VS Express for Web tile.

    VS Express для Web плитки

    VS Express для Web плиткиVS Express for Web tile

Приложение б. Фрагменты кодаAppendix B: Using Code Snippets

С помощью фрагментов кода у вас есть весь код, который требуется в вашем распоряжении.With code snippets, you have all the code you need at your fingertips. Лаборатории документ поможет определить точно при их использовании, как показано на рисунке ниже.The lab document will tell you exactly when you can use them, as shown in the following figure.

Фрагменты кода Visual Studio, чтобы вставить код в проектUsing Visual Studio code snippets to insert code into your project

Фрагменты кода Visual Studio, чтобы вставить код в проектUsing Visual Studio code snippets to insert code into your project

Чтобы добавить фрагмент кода, с помощью клавиатуры (только C#)To add a code snippet using the keyboard (C# only)

  1. Поместите курсор в место вставки кода.Place the cursor where you would like to insert the code.
  2. Начните вводить имя фрагмента (без пробелов и дефисов).Start typing the snippet name (without spaces or hyphens).
  3. Посмотрите, как IntelliSense отображает, совпадающие с именами фрагменты.Watch as IntelliSense displays matching snippets' names.
  4. Выберите правильный фрагмент (или продолжите ввод, пока не будет выделен весь фрагмент имени).Select the correct snippet (or keep typing until the entire snippet's name is selected).
  5. Нажмите клавишу Tab дважды, чтобы вставить фрагмент в положении курсора.Press the Tab key twice to insert the snippet at the cursor location.

Начните вводить имя фрагментаStart typing the snippet name

Начните вводить имя фрагментаStart typing the snippet name

Нажмите клавишу Tab, чтобы выделить фрагмент в выделенныйPress Tab to select the highlighted snippet

Нажмите клавишу Tab, чтобы выделить выделенный фрагментPress Tab to select the highlighted snippet

Снова нажмите клавишу Tab и фрагмент будет расширятьсяPress Tab again and the snippet will expand

Снова нажмите клавишу Tab и фрагмент будет расширятьсяPress Tab again and the snippet will expand

Чтобы добавить фрагмент кода, с помощью мыши (C#, Visual Basic и XML) 1.To add a code snippet using the mouse (C#, Visual Basic and XML) 1. Щелкните правой кнопкой мыши место для вставки фрагмента кода.Right-click where you want to insert the code snippet.

  1. Выберите вставить фрагмент следуют Мои фрагменты кода.Select Insert Snippet followed by My Code Snippets.
  2. Выберите соответствующий фрагмент из списка, щелкнув его.Pick the relevant snippet from the list, by clicking on it.

Щелкните правой кнопкой мыши, где необходимо вставить фрагмент кода и выберите Вставить фрагментRight-click where you want to insert the code snippet and select Insert Snippet

Щелкните правой кнопкой мыши место для вставки фрагмента кода и выберите Вставить фрагментRight-click where you want to insert the code snippet and select Insert Snippet

Выберите соответствующий фрагмент из списка, щелкнув по нейPick the relevant snippet from the list, by clicking on it

Выберите соответствующий фрагмент из списка, щелкнув по нейPick the relevant snippet from the list, by clicking on it