Exercise 2: Injecting a View

In this exercise, you will learn how to apply Dependency Injection into a View by using new MVC 3 Features for Unity Integration. In order to do that, you will call a custom service inside the Store Browse View that shows a message with an image below. The service will introduce a new dependency inside the view as it has to be initialized in a point.

Then, you will integrate the project with Unity Application Block and create a Custom Dependency Resolver to inject the dependencies.

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 dependence. The mentioned service is a simple messaging service example that is included in this solution.

  1. Open the begin solution MvcMusicStore.sln at Source\Ex02-Injecting View\Begin.
  2. Include MessageService.[cs|vb] and IMessageService.[cs|vb] classes from Source\Assets\[C#|VB] folder inside /Services folder.

    Note:
    The IMessageService interface defines two properties that are implemented by the MessageService class. These properties are Message and ImageUrl and are defined to hold the message and Url of the image to be displayed.

  3. Create the folder /Pages at project root, and then add the class MyBasePage.[cs|vb] from Source\Assets\[C#|VB]. The base page you will inherit from has the following structure:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting Views – MyBasePage – CSharp)

    C#

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.Practices.Unity; using MvcMusicStore.Services; namespace MvcMusicStore.Pages { public class MyBasePage : System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreBrowseViewModel> { [Dependency] public IMessageService MessageService { get; set; } } }

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting Views – MyBasePage – VB)

    Visual Basic

    Imports Microsoft.Practices.Unity Public Class MyBasePage Inherits System.Web.Mvc.ViewPage(Of MvcMusicStore.StoreBrowseViewModel) <Dependency()> Public Property MessageService As IMessageService End Class

    Note:
    On behalf of a technical reason coming from the ASP.NET engine, the dependency at IMessageService interface can’t be included into the respective View Model Class.

    The class MyBasePage intercepts the relationship between the View and the View-Model so the dependency injection at MessageService can now be inherited by the View.

  4. Open Browse.aspx view from /Views/Store project folder, and make it inherit from MyBasePage.[cs|vb]:

    C#

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="MvcMusicStore.Pages.MyBasePage" %>

    Visual Basic

    <%@ Page Title="" Language="vb" MasterPageFile="~/Views/Shared/Site.Master" Inherits="MvcMusicStore.MyBasePage" %>

  5. Include in Browse view a call to MessageService, that will display an image and a message retrieved by the service:

    HTML(C#)

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="MvcMusicStore.Pages.MyBasePage" %>
    FakePre-d01d2434f7df4ef0822ea83e489a925e-d7329229dd944017b50566e1ac6a12e9FakePre-12cd678421604970b5675179034edd12-8b7125dd6abe492b920da85d73ca6d20FakePre-dcd3d6f766bd416f861696494be7528c-c38c2fd849674fa5a6bcd9a1434ff449FakePre-718b85012b1440038a7ebc1d50f03845-e24722a79b93405e82f811c4ead411fbFakePre-3e7abfeb7d5f4aa6b39201a5d5c9d78c-94e059ba14064cada9b4e9ea170ee7aeFakePre-e0c74d1bf4ce4cd2a2ba0214483c8fe1-cef67d31c48542478a7b13e878d63fc1FakePre-77af07bc2788443cbe1cf815df27d748-ff97d3e3a98946f28845c48e2228e5e4<div> <%= this.MessageService.Message %> <br /> <img alt="<%: this.MessageService.Message %>"src="<%: this.MessageService.ImageUrl %>" /> </div>FakePre-ea902a63302a4801983bb37aafdc0098-d0f21c8d537149d0a8a3376331d0aca4

    HTML(Visual Basic)

    <%@ Page Title="" Language="vb" MasterPageFile="~/Views/Shared/Site.Master" Inherits="MvcMusicStore.MyBasePage" %>
    FakePre-eb4b1f0ba8cf43a683219a8ec3f69315-8a562a0accc44a00a845187bbfe434b5FakePre-8a4bb4a0f2c84479b5f69428e4758cb5-77f4fe0e3e2344aebd8978863acac12bFakePre-9fc7297e02704fa08607acce7307041f-e26b7ef581904b14b199b6fe4fc0b694FakePre-0b38f129887e4ec38e294f82ddfdd9e3-30027bde1e9e4cd4b56e700e729ca043FakePre-8f606d25a6554568bfd81fd34c43b37d-9b86b37e985c422cb9013493584096c9FakePre-ffc300f6e9164f5d93a2222635e60f21-523c677d6ee84e72953884d99a0d46ddFakePre-effe53a8dfaa487f94fc58218a5cfaae-3266c8c1fe8e4904a1eb9fdfa06d9223<div> <%=Me.MessageService.Message%> <br /> <img alt="<%:Me.MessageService.Message%>"src="<%:Me.MessageService.ImageUrl%>" /> </div>FakePre-d8c0c61f4b60488caefe1bf1b484cf0b-72810ffa0e3b4d02a1c0305303e4a4eb

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. Now, you will start solving that dependence by implementing the new MVC 3 Dependency Injection Interfaces IViewPageActivator and IDependencyResolver.

You will include in the solution an implementation of IDependencyResolver that will deal with service retrieval by using Unity. Then you will include another custom implementation of IViewPageActivator interface that will solve the creation of Views.

Note:
Note: MVC 3 implementation for Dependency Injection had simplified the interfaces for service registration. IDependencyResolver and IViewPageActivator are a part of the new MVC3 features for Dependency Injection.

- IDependencyResolver interface replaces the previous IMvcServiceLocator. Implementers of IDependencyResolver must return an instance of the service or a service collection.

C#

public interface IDependencyResolver {

object GetService(Type serviceType);

IEnumerable<object> GetServices(Type serviceType);

}

Visual Basic

Public Interface IDependencyResolver

Function GetService(ByVal serviceType As Type) As Object

Function GetServices(ByVal serviceType As Type) As IEnumerable(Of Object)

End Interface

- IViewPageActivator interface provides more fine-grained control over how view pages are instantiated via dependency injection. The classes that implement IViewPageActivator interface must create the instance of a view having context information.

C#

public interface IViewPageActivator {

object Create(ControllerContext controllerContext, Type type);

}

Visual Basic

Public Interface IViewPageActivator

Function Create(ByVal controllerContext As ControllerContext,

ByVal type As Type) As Object

End Interface

  1. Copy the class CustomViewPageActivator.[cs|vb] from /Sources/Assets to the Factories folder. This class implements the IViewPageActivator interface to hold the Unity Container.

    C# - CustomViewPageActivator.cs

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

    Visual Basic - CustomViewPageActivator.vb

    Imports Microsoft.Practices.Unity Public Class CustomViewPageActivator Implements IViewPageActivator Private container As IUnityContainer Public Sub New(ByVal container As IUnityContainer) Me.container = container End Sub Public Function Create(ByVal controllerContext As ControllerContext, ByVal type As Type ) As Object Implements IViewPageActivator.Create Return Me.container.Resolve(type) End Function End Class

    Note:
    CustomViewPageActivator is responsive for managing the creation of a view by using a Unity container.

  2. Add the class UnityDependencyResolver.[cs|vb], which is included in the folder /Sources/Assets, in the project folder /Factories.

    C# - UnityDependencyResolver.cs

    using System;
    FakePre-92e5e5f04dca4747b9f34675cf32ce0d-4ee6dbef957e48f5b63cd60d2f9dac93FakePre-44e9fdcd2fe44e2dbf5678ef99c46f1c-f86f6dd24d38476e967d048a59594227FakePre-f76c1cb097b84080afbc5db56b6caaa0-6b4a634d1faa45d09d500bbf49816393FakePre-85164f70dc0b4e65b71c6e84edf16a90-c2e2c1f5a672408ea0f97a4cda853e1fFakePre-5026e9e561464147b95f5473204a4321-730b0718673744e98035d3f9bb9eedbeFakePre-f43db8034e6541f9922ac9725367618f-b244858e63f54f4ba740fd9cdaab4e72FakePre-7b7da82fb3504c2ea139bc112be22e4c-0331021ec7b84622992ce5596e61c4f1FakePre-0f8261b6e76d422382b0820c9bd3782e-2eaf299f978241948cca413cfe83109e public class UnityDependencyResolver : IDependencyResolverFakePre-c6289b7066a74805ac488fbfd59f11a4-9a6959f2a9614a8586f5270c7b679c8eFakePre-4a24ad10400e4550854e4b6b18d49b81-d3e3d985b70d48d9aa9f8f03387b661eFakePre-ea019d3d9f4a479ebc80abef256641fc-8926417c819845a3bb69ded41404ec8fFakePre-d4cf9e2393804b98ba57de84306c5787-b450e9bf41c04ccd80693bb55ff61ecbFakePre-a407a5db295c4807b2a58f71eed6dbca-1e8227a59e604c04ac45d5d065931130FakePre-397ea151209c4a3e9cf5a56dfa98a92a-c413333db82a4268b4853605e1733f83FakePre-cce17b6c5d954fad9bea44f03ae3bfe8-6939d015a8c64921b790c5cae3c69c0fFakePre-dd0b95bc0c0245948ea548aa1339f30e-58614c0cfb3943909f18b5dad9f11ad5FakePre-5dbb99962afb4f37a266571c64d453af-4daace4759344253802b386f54f716eeFakePre-8d57abf60d184d559bf411c31885ccf7-3b7e8a9e5d5541ef93f9b8a467e82feeFakePre-07cb901205e54096ab3e5cf29ab73064-b3dd263be7494ca583ae3de36318e383FakePre-4f4758af9b3e4ed88d17547427031ed9-07767146367447889a78a82826ca8d56FakePre-f31a4d69e15e4d0eb47c8278c6831541-9daf83a9304841258eae057ac2ace921FakePre-37941cf1bfc0457bb22db16d518f2932-719f71a2e1cd45f1b5e2f4e81955361dFakePre-93b31b0c83f24ea28835eb17ba671814-c3b471cf1b0d418193b10e3bbbf4270aFakePre-7498731312ba490588945161cf760e01-6a87b5089f584296b7bb70296aa0eaa3FakePre-f758c4cf87c742eca5f5b4a923c00969-ff31f7f2372c46db8a8e072e1bf91569FakePre-bbd532bbbda34aabb533582e7ffa96dc-da60a50fe7ce4b6e947f3b398bb2b354FakePre-92966281b45a4c849ddc91ccc1be8671-5be0dfb47ad8450785a00120d7bf366fFakePre-d22166671bb9470da3f788725e8f8157-83b5a7addd2e417ba1107af923d14627FakePre-70af5b516ff745859d7e0ea9474ac286-3b761c91cde444f49bf9ffb38749dd83FakePre-01d708eedc4947bd98c5cb09ca2dca82-9fc1a05be6d64da6be8ffa7855f8cd36FakePre-3d607bd06946407a8609ec49739788fa-835b44915386426ea7be56e0b0d16f1dFakePre-d9b30bb81b3c41b9976bca43c4bad979-d2dd672fa61f46699af8a392086921e3FakePre-b40d1fcc0f8d4c559661a3425941dbd9-911666320d1b414382e4fb7bd4921d77FakePre-170e35cf75364f4fae0b2460fcb23e1d-6e5a4b3de49244adb7458f36180c84d6FakePre-6066ab5c569342ecb6321cc53b272dd7-72691fedde4a4fd7abb07218a2fc67e7FakePre-27c7ce9e8045472387de224e20a8c6a8-860ed329eb98430f80e34e7986d92aa6FakePre-0f8db55fe52443248e4c316564a87eac-41cba6b9014c45ecb35d1a070dcad16bFakePre-b5856aa2a4e9403781fe829f38f9c4c7-3229160c63e1460a917b38b6977320e8FakePre-6345f5b74d984f44a76f2780dcfb46fb-42840afa326e450c92607d80114d9558FakePre-e95cba4f293b4c46bcc109b82482953d-c30d99bb9bd24b19ac9b6c9ab553d696FakePre-89a2d428b1744697b51fa7b11c74c9c7-e31262edad7a4a12bc1ada46463feb4fFakePre-ba40b0d0cfb748bab312281f12001b91-85f57e7eb8714151a6ca802d7059f9c6FakePre-a4b86a4698c445dda5df1c7bca62325b-f38ff6036b0040b68a67a31cfe00158b

    Visual Basic - UnityDependencyResolver.vb

    Imports Microsoft.Practices.Unity
    FakePre-c15a4425e58d408484581ff28d0e2428-08be2d7060314a54bc7036026fc3a651Public Class UnityDependencyResolver Implements IDependencyResolverFakePre-385d799a32f34d508ee20dee412e67a9-e920d41eac74456caff3e94b19362f77FakePre-58f9ba8a13694a2391bc5504ad945321-f4a41d5b21a24341ad39200137bfdb7fFakePre-b0f4a0d7c02a45b08b5b6b936e098bd0-881d31692b474411a7fc77e76f16a471FakePre-7cfbfa80c47248b3acc2597a65bc9b38-dcbc9c3e34e44fce9c59eb048653d57cFakePre-b07490e1cd1046929c2fa08de961993d-5e79e23559a84a7ab62411b8093d77e4FakePre-8da5ec86ed904ccab3aaf16e10a89284-82be3a2999514924a118f5b0abb7f6efFakePre-a790f1bdd5844c839eebbebaae2b8b44-e0b4b985cf564381889ee7f46dcbdff7FakePre-1ef980c564ed445aaf89750dcfab2980-d7537e1a108a43bfbbad800e6a76c8b4FakePre-c319f23d21c04622978a661937483a96-061d6d51728b4eda81eccceff4de59adFakePre-5b72a00a24e545c098a862131749f2aa-ee829d0a137d40b5acbcfe91971232d2FakePre-a25022fdd8b34d8080bc85ec0499a8c9-34d0b3f767bf46689d3fd2b5f17cf2eaFakePre-138c1e153cd94db69022a082aefab362-7fce8b7758c546e78a198e71e77d4f94FakePre-ced92cd41a5c4baa8a00fe75a2bafe7d-056fa70ce7e64e61a952c5d1a78c2ff7FakePre-0285649e38cd4dd782ae3380a1f20ea9-e997754e9c3a4cd1a681b9fff2ac826cFakePre-d1c71199e1d145cbb4d353d6fa6de15c-e18732808085484c94834c07e23778ebFakePre-aff54514b7134794b95a5c31b95a9acf-b0e7ace26d2a4fb9a88db2571087ed48FakePre-4a567e77821c496481fce59552f38277-b9e5565a36464c538d1b9fe59af874a1FakePre-6a16a4db518542d2a4ca045f9008becc-0b28ceb81977441587e9480f38368cceFakePre-17cb14029de4415090c341bae2ec4e64-aa39b36a177f411283d3f75e355242e1FakePre-4df7a98a0e3e47a098a9f1185fb4b72d-cfe78b8ab5054f97b7e6f4ea4714d8d9FakePre-291fd1f6ddb24871a0dfe512f723fca1-bbfe1e0076064ecc85c314984a8c01b3FakePre-3fc77e72e6734286848189ce33bc31eb-333ea3e8450c4f99b4eafa7e781a2119FakePre-e697e74d77714d3fa2a400559bd39255-085c1155c36444ebbc35fcba7bafa6d9FakePre-6fa1e9418f3545b39c067e5e57a830ff-76c50328b4074e75a4972e70aca7c1c4FakePre-8b9fa49ec3ad49c8b3f5346314c7f2f2-5f9d576283634cb7b59ab0d7e8374846FakePre-b9c9224fb375455b8e886b37e14729d2-5f226cdba2b642a3bb91813c25928a0cFakePre-3efaff4b2d4949df8bd0eadb0294b9c1-d02a96ae6c4741fabc9f5afef272ae80FakePre-3013af37e46244f7a5d732e54719178b-ca5046efa8a045f39306f3eebb8ddf39FakePre-9a348adda7844e0f940e001349ed0124-212f6d0c35f1423da4aac82783a7ec6eFakePre-fdc5725dd5c640b297686530ea82a425-8b42ab71342942498ccabdc03cf42232FakePre-bda2d094d1cd48938dff82b150663b03-6aa8e306ac81427a8558e293bd3aa606

    Note:
    UnityDependencyResolver class is a custom DependencyResolver for Unity. When a service can’t be found inside the Unity container, base resolver is invocated.

In the following task both implementations will be registered, to let the model know where to locate the services and where to create the views.

Task 3 – Registering for Dependency Injection in Global.asax.[cs|vb] Application_Start

In this task, you will put all the previous things together to make Dependency Injection Work.

Up to now you have the following elements:

  • A Browse View that inherits from MyBaseClass and consumes MessageService.
  • An intermediate MyBaseClass class that has dependency injection declared for the service interface.
  • A MessageService service and its Interface IMessageService.
  • A custom dependency resolver for Unity: UnityDependencyResolver, that deals with service retrieval.
  • A View Page activator: CustomViewPageActivator, that creates the page.

To inject Browse View, you will now register the custom dependency resolver into the Unity container.

  1. Open Global.asax.[cs|vb] at project root.
  2. Register an instance of MessageService into Unity container that will initialize the service:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration – Csharp)

    C#

    protected void Application_Start()
    FakePre-02e6bc575d33484ca04838fafea49c52-fbc5753ca3d74c808d1c4d4ffc19801eFakePre-e98afdea67574b99b0de3f1efab80020-bebf90cd7c754a189474259209a554d2FakePre-0404e28d7fd7453cace5bb6c09df946a-83b3b7537da14dd984d18c2b9b98d304FakePre-61ecd21ff41e4d9bb3a49ed9a4e9a94d-edabcd49f3fc4b1c82663c71992456aeFakePre-6bbc38859f0c4b0c88603c18a76e0043-c028ef256d5c4c68ad46fba1784069e0FakePre-a7ad83513b91465c8c1b53b5dda0f2e6-9a92017a545e4560a77d209759409c4aFakePre-48dd1a5adc7d41d3a7e5d8da0ea04305-8cf5828a91a94b64969ff2455c41acc1FakePre-cbbfcaf0b094439f969831f9ebf01b03-b58f560df7c2473ca05d5479a80eb3dcFakePre-5c78d2aaed8d45458465019e36148e25-6b692247f7ef4df38bbf46f263626e1bFakePre-cf8aa14edc774771b897711b468cec3b-c9fb749563cd4f569e6645cae5151484FakePre-a24bb1049ebc410c930d358a5cf6cc8a-a21edc8a301b43928c687d8464c9435bFakePre-df721d83896546d09b6c6737b9e32fc2-e75a934c6373478bb3234d510293f066FakePre-5ad4b2e94ba84e15bdaee8942ed247bf-6a069f732fe64f50a0fc66ea77aba604 container.RegisterInstance<IMessageService>(new MessageService { Message = "You are welcome to our Web Camps Training Kit!", ImageUrl = "/Content/Images/logo-webcamps.png" });FakePre-43e61db5fd064bee979e81b494a7f4c4-9f858faea1b34e028a6637495b5bdc5cFakePre-5163f1eeddfe43afb94a69ec6c7af246-a594bb100b5a49bba7cd635b20045dce

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration – VB)

    Visual Basic

    FakePre-a954b5125c504ac0810bda70560423e6-469762b5325f44d48e49b2c74a0605dfFakePre-7b71fa2fb9a14311b156bc2539a8664e-e831e2e16fcc495a9aea3eeaa2db952eFakePre-d614955ee77b44249b5d92f7fe4ec0e2-612e6181daa844c09cad68d4fc5541f1FakePre-c24eebfd81604579ae96ab7401334b80-d243195208cd432f86e2c252be460145FakePre-09fe40a281354a5985387beddf553f3a-c426478da6be4d019be97505678028e1FakePre-58b2b25c7e6c4efb9a64be6909071ad7-dc6ec31a48284733809fe606da312163FakePre-c42b26e696804fd1a1f5c9fc28bb855b-72a6a3a8b1e840d68ac042c0cbc02171FakePre-9e8a5255bc8249519a1b78dc5c835e7a-8f901a3fbdbf4597930699039940ca7fFakePre-e8965cc8ce694a50a302c986756891b3-22f4170fa9674b929f74513254e9a29aFakePre-b218c5a371684bed938ae9a1ee826ec4-8c510499ab9544219c9c6682a7bcc7c1FakePre-1dea64d331b94c958cb0db0bcd790796-9af158a8784d4323b1abe1f24f2a50f9FakePre-26ee61ea7e2a4f7fbfb56c1850c1de7e-ea612a20ded7439194bb578311365476FakePre-98fce8e4eec549a9b8887ee913de2b31-e12a84bea97b402fbe9838e3a67b9b3b container.RegisterInstance(Of IMessageService)(New MessageService With { .Message = "You are welcome to our Web Camps Training Kit!", .ImageUrl = "/Content/Images/logo-webcamps.png"})FakePre-432ac38170ba4434acd990ff72c45374-203516bf44164631b23bac19bf064252FakePre-33b27c03c7d946309471416553dc2734-83ae79d3c01444059d7d0d6521688df9

  3. Register CustomViewPageActivator as a view page activator into Unity container:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration 2 – Csharp)

    C#

    protected void Application_Start()
    FakePre-d198f5a5aa084ed3bb0579282cee80d1-c399a1ca650a4691bf081e4962fd35f0FakePre-17ab23362cf34afbba364292a9c6b735-fe1d678f7dc54e7cab8c03e60e030ae0FakePre-b5fd65760fbd4e619c3c10d7b53b9b89-b6f0b59baef14afb9983792febff4900FakePre-8451b708115d41c4b11c3ee00dd92dbf-9ebfda31873d4afea3998009360c3b27FakePre-ab6879d970cd416bb7fb880f3b0ad4eb-8fdb9b992a3447e2a042d1c72a694c90FakePre-9f215f3e125e417abdb5ac71bad152d9-acdad44b35204abab16924a737f26a2f container.RegisterType<IViewPageActivator, CustomViewPageActivator>(new InjectionConstructor(container));FakePre-ba9152a724334dd9a4190f2d17513b58-2aadbe12bbaa41a3a399384f98dfe651FakePre-a6e0f784dfb648b6bf8b36edf3c19564-8564124433a34853a91fba846cb36833

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration 2 – VB)

    Visual Basic

    Protected Sub Application_Start()
    FakePre-70fcdfe5f7274a0384b18e8ae063a9cb-b50be37a48274e20895035ef609fc875FakePre-0ea4c8d9712444209cbaffd2c325e59d-737bd41ea053471496ef8717b6ca8398FakePre-37441c8f6b974325b3c39f3265ef02ec-d19b0ca056074b60b6b897c09ceb40e7FakePre-2825c0ae2cd3474d82e8cde6e04097f2-d9d03d56cd5d41128555f727d886c3d8FakePre-29a006003977408083d311b8199562b9-b15302979eea4195bc0a3b33fb466a06 container.RegisterType(Of IViewPageActivator, CustomViewPageActivator)(New InjectionConstructor(container)) FakePre-5770e04cc5964fafb02635589f365aa7-77c2969002f244bdb1baffffbbb21b4f

  4. Replace MVC 3 default dependency resolver with an instance of UnityDependencyResolver:

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration 3 – Csharp)

    C#

    protected void Application_Start()
    FakePre-b2ee332a420a4f4e9bd37b4efcdcb878-817103e61a5a4a3191b7939da75da056FakePre-20c24a6b8e3d4ac0862ceec0d34f74c0-3a3331e143474f3e9afa6e43bb7a0fc4FakePre-b0de3c280ade40d9b1c53d124e8339c2-d4d66f8438e84107b297d5dad6420807FakePre-2edd52aa96b04bc6a9e8af2378d1f3ba-b31f525562ba423ca85679ea869fb768FakePre-86578223e2804d21961e8b52e6cd6299-8f20d8ef9fec40d8b37126af0dcd3f4fFakePre-4f32406226194103be6b2df7dec56245-433d8aa3478945ee9b09309aa70d307cFakePre-14458c7947ad49fd87531869c4c43ff1-266a192cc9c34fd9afd6fea892b1a379FakePre-83afad00dee948d29348e0691b35f3ce-12c527d7dbde48a09f9392f39978b7d5FakePre-002cac3223344914bb349b069e65bd69-edf3849798fd41238bdcdbdd22d82095FakePre-09006e3cdeb4426da2aa0692d1ee6d41-3b275ffc12e44dc3a95e3e3e534a2feaFakePre-09c0f4f8459248f1aac2f97ae1730722-3172b5ac2bc14351a13ef98f0b59043dFakePre-4613a177086c4f8a85d0bcdcbfeb8d1b-260ba74532ff4242b533e384ef652287FakePre-e6747288b11d43ad8cda62e6340514e5-b1c14b5ff5454a0ab0bcdaaaf9f2f40aFakePre-895fef90b669410b973fefbe541a2aca-f76cf9f6bf244afe9dbbbea50f9b09b9FakePre-3f941872bc3e4d1da87b11cf6dbec958-821ef4faf36d495396e07e3014b78213FakePre-0707946e75364af78de541b5cab14484-044ec8b41b0d44f4b6c3825ebb078173FakePre-d183d8482bcd4caa95ea8e0189fa7a9f-e304c25c637c49788399aa2945b5e149FakePre-36761643538549cdb4c0879214478769-35c1fd27a43e4db49c3181e202e6e0f2FakePre-2bc756e34f1d48499a9ba010ca7577ee-ad9b0f3d13934b0ea5d593e6e05c9ae0 IDependencyResolver resolver = DependencyResolver.Current; IDependencyResolver newResolver = new UnityDependencyResolver(container, resolver); DependencyResolver.SetResolver(newResolver);FakePre-1f0e97771df44dea85573a5f6cf9c1e7-6b1c9f7962f141b9ac0c9b3d8f308601FakePre-fcb469de65334ac0bfa0ee56a8951dee-d0882c1dd6804aa9924c24a07dcb0e0fFakePre-e4cdb6f3554047ca900fb2b3840be82e-74a4e2bc079448d68e755aea92909dac

    (Code Snippet – ASP.NET MVC Dependency Injection – Ex02 Injecting a View – GlobalAsax Registration 3 – VB)

    Visual Basic

    Protected Sub Application_Start()
    FakePre-c5a28132cb274792ace34ed3a6450a9f-d8896e99f58f4bb6a91588eaca342758FakePre-69486b52885f403d9e21d8b2968a3bc0-5c6f7bc68b514253a9730a25c868aa95FakePre-6547295c970043bb850a475d0df259e4-9c1b4cd534434350be3c7161ef6c9f4bFakePre-bbce0c67a11f4118b6208b02e7c014b4-31b42ee4129c419780a126903ec5027eFakePre-f05fe413e87245f8a4c234ee14f334a3-a7fd13e92bcf47b7910860e29bc7265bFakePre-5bedf063c0754d6087d82379261c0f61-4d626dc49924410d965da50412befabcFakePre-4e045532b89b421698712e57e876cab0-6e3164c9afda477cb843ac44c33b5afdFakePre-521fae2b5b5748fdb695e5e1e5dac82e-1f5cf6377ae641d29fde6b3ddc272959FakePre-f088c377b6634cd0bfaace0e423cb84d-bc0bc7fa5ff74416a27f5ffd3aec820dFakePre-9629abd3e3ca467d81f0c065e3d255bf-638964e164e04d39834d6c023268d7f8FakePre-45acb1ad49b840bfbcdb4fac7a9ef80e-7b0ff54efaae4eee807ecf6b61fe8e1cFakePre-b2cd22c56e614898a0bf2b3652793709-9bcdd71c6f7a40e3b9d8931b9bc79133FakePre-5265793c58aa4f2c9cb44df5e5f46b12-c79cb60e03914984aa45f69aa0e91507FakePre-01b1e8a03f7a48adbfd41995bc8e2988-e6f843ea5cba4989b0df0c245f01db6eFakePre-3d8b47b609f4467a913105393e0a7e41-3e7f975b4c3342ba9bf65ce1461e240cFakePre-24b4bb24e7324c8ebc422d17b696000b-5026389a6ffb4934baf047a949cc1cfbFakePre-b9eeebacef3a42cdb42ed4b91a9fa798-637dff8639f044f7a4473c054823b0e6FakePre-77843b392acb4b8e95a706bfa3c256b1-96fe52b9325d4c8db45f7a02711dcb7eFakePre-1503c4192ddb45a8a7e31f00c29d13f8-6bfb79bd7c6e490fb8428bd674b5ddcbFakePre-dbfba999f2ad4a0892b35097aecd6f9f-35a2e747bcfb46ec9be5ab229649e15a Dim resolver As IDependencyResolver = DependencyResolver.Current Dim newResolver As IDependencyResolver = New UnityDependencyResolver(container, resolver) DependencyResolver.SetResolver(newResolver) FakePre-0b5bfc1411fb444ab507a901697d5706-574c9c00202a49cda3e61a69de8d9654FakePre-e3c042809ec94ac2b485855188f43c58-391fab3277f1474596240158ca561898FakePre-7a743188b5ba4fa4bac44c9fc59f159b-60c3cd719c0b46a39f2895a445549c9dFakePre-cdd0638167974fd88e7e96f1268748ef-cad48aa52b4e4ab39b52262ec7060d5d

    Note:
    ASP.NET MVC3 provides a default dependency resolver class. To work with custom dependency resolvers as the one we have created for unity, this resolver has to be replaced.

Task 4 – Running the Application

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 by it:

  1. Press F5 to run the application, where Home page will load.
  2. Browse to /Store and enter to any of the genres that are shown below. In this example, we enter to “Rock”:

    Figure 1

    MVC Music Store - View Injection

  3. Close the browser.

Next Step

Exercise 3: Injecting Action Filters