MVC3集成Unity 2.0

This blog posts shows a step-by-step instruction how tointegrate the Unity 2.0 dependency injection container in anASP.NET MVC 3 web application.

CreateMVC 3 project and add Unity 2.0

Create a new"ASP.NET MVC 3 Web Application" project in Visual Studio 2010. Forsimplicity, we will use the project template "Internet Application",which adds some some sample controllers and views to the project.
Download Unity 2.0 here from MSDN and run thesetup. By default, the setup will extract all Unity files toC:\Program Files(x86)\Microsoft Unity Application Block 2.0\. Copy all dll files from thesubfolderbin into your ASP.NET MVC 3 project. It is recommended to savethem in a new subfolder (for example "libs") in your project. Indetail, the project should now contain the following the dll files:

·       Microsoft.Practices.ServiceLocation.dll

·       Microsoft.Practices.Unity.Configuration.dll

·       Microsoft.Practices.Unity.dll

·       Microsoft.Practices.Unity.Interception.Configuration.dll

·       Microsoft.Practices.Unity.Interception.dll

In the SolutionExplorer, right click on "References" and click on "AddReference..." and select these five dll files in the tab"Browse" to reference the libraries in your project.

RegisterMVC 3 DependencyResolver

To use theUnity dependency injection container in the newly created ASP.NET MVC 3 projectwe first need an adapter class, that implements the interfaceIDependencyResolverand maps the method calls to a concrete Unity dependency injection container(an instance ofIUnityContainer, see this post):

publicclass UnityDependencyResolver :IDependencyResolver

{

 readonly IUnityContainer _container;

 public UnityDependencyResolver(IUnityContainer container)

 {

   this._container = container;

 }

 public objectGetService(Type serviceType)

 {

   try

   {

     return _container.Resolve(serviceType);

   }

   catch

   {

     return null;

   }

 }

 public IEnumerable<object>GetServices(TypeserviceType)

 {

   try

   {

     return _container.ResolveAll(serviceType);

   }

   catch

   {

     return new List<object>();

   }

 }

}

In the Global.asax.csfile we will set up a Unity dependency injection container in theApplication_Startmethod and use our little adapter class to register the Unity container as theservice locator for the ASP.NET MVC application.

protectedvoid Application_Start()

{

 [...]

 

 var container = new UnityContainer();

 container.RegisterType<IMessages, Messages>();

 DependencyResolver.SetResolver(new UnityDependencyResolver(container));

}

In the abovecode, we also register a type with the container using the RegisterTypemethod (you can find detailed information about configuring the Unity containerand in theMSDN library).
In this simplified example, we just register the type IMessages with theconcrete implementationMessages. The next section shows how this type isimplemented and used.

Resolvingdependencies

To test thedependency resolving, we modify the HomeController.cs and add a newpropertyMessages which is annotated with the Dependency attributeand use this property in theIndex action:

publicclass HomeController : Controller {

 

 [Dependency]

 public IMessages Messages { get; set; }

 

 public ActionResult Index()

 {

   ViewBag.Message = Messages.Welcome;

   return View();

  }

 

 [...]

}

Of course,before we can build our ASP.NET application we need to implement theIMessagesinterface and Messages class:

publicinterface IMessages

{

 String Welcome { get; }

}

 

publicclass Messages : IMessages

{

 string IMessages.Welcome

 {

   get { return "Hello world fromUnity 2.0!"; }

 }

}

After buildingand starting the application the Unity dependency injection container shouldresolve the dependency that is defined in theHomeController and theapplication's start page should say "Hello world from Unity 2.0!".

You can download a sample Visual Studio 2010project containing all the source codehere

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值