IoC实践--ASP.NET MVC5 采用Unity依赖注入View详解

转载自:http://www.lanhusoft.com/Article/109.html 

我上一篇文章是介绍的是用Unity依赖注入ASP.NET MVC5的Controller,其实不只是Controller可以依赖注入,View和Filter这些都可以用IoC框架进行依赖注入。下面我介绍一下怎么用用Unity依赖注入ASP.NET mvc5的View,注意本文是在上面一篇例子的基础上加的。

1、定义View要用到的接口IMessageService

  1. namespace MVC5DependencyInjection.Abstract
  2. {
  3. public interface IMessageService
  4. {
  5. string Message { get; set; }
  6. string ImageUrl { get; set; }
  7. }
  8. }

2、定义接口IMessageService的一个实现MessageService

  1. using MVC5DependencyInjection.Abstract;
  2. namespace MVC5DependencyInjection.Concrete
  3. {
  4. public class MessageService : IMessageService
  5. {
  6. string _Message;
  7. public string Message
  8. {
  9. get { return _Message; }
  10. set { _Message = value; }
  11. }
  12. string _ImageUrl;
  13. public string ImageUrl
  14. {
  15. get { return _ImageUrl; }
  16. set { _ImageUrl = value; }
  17. }
  18. }
  19. }

2、为之前用到的UserController一个新Action为Show

  1. using MVC5DependencyInjection.Abstract;
  2. namespace MVC5DependencyInjection.Concrete
  3. {
  4. public class MessageService : IMessageService
  5. {
  6. string _Message;
  7. public string Message
  8. {
  9. get { return _Message; }
  10. set { _Message = value; }
  11. }
  12. string _ImageUrl;
  13. public string ImageUrl
  14. {
  15. get { return _ImageUrl; }
  16. set { _ImageUrl = value; }
  17. }
  18. }
  19. }

3、定义一个BasePage让这个类继承System.Web.Mvc.WebViewPage类

  1. using Microsoft.Practices.Unity;
  2. using MVC5DependencyInjection.Abstract;
  3. using MVC5DependencyInjection.Models;
  4. namespace MVC5DependencyInjection.Concrete
  5. {
  6. public class MyBasePage : System.Web.Mvc.WebViewPage<UserInfo>
  7. {
  8. [Dependency]
  9. public IMessageService MessageService { get; set; }
  10. public override void Execute()
  11. {
  12. }
  13. }
  14. }
MyBasePage是继承于System.Web.Mvc.WebViewPage的,其实mvc新建视图编译这后就是默认就是继承于这个类的。这里定 义的强类型绑定的是UserInfo,并且为这MessageService属性加了一个元属性Dependency,这个元属性是在 Microsoft.Practices.Unity定义好的,表示这个MessageService可以依赖注入。

4、为新加的Action方法Show添加视图

  1. @inherits MVC5DependencyInjection.Concrete.MyBasePage
  2. @{
  3. ViewBag.Title = "Show";
  4. }
  5. <div>
  6. @this.MessageService.Message
  7. <br />
  8. <img alt="@this.MessageService.Message" src="@this.MessageService.ImageUrl" />
  9. </div>

5、注册依赖使用依赖注入生效

在原来的Application_Start代码为

 

  1. protected void Application_Start()
  2. {
  3. AreaRegistration.RegisterAllAreas();
  4. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  5. RouteConfig.RegisterRoutes(RouteTable.Routes);
  6. BundleConfig.RegisterBundles(BundleTable.Bundles);
  7. //注入 Ioc
  8. var container = this.BuildUnityContainer();
  9. container.RegisterInstance<IMessageService>(new MessageService
  10. {
  11. Message = "欢迎你来到wwww.lanhusoft.com",
  12. ImageUrl = "/Content/Images/1.jpg"
  13. });
  14. DependencyResolver.SetResolver(new UnityDependencyResolver(container));
  15. }

 

注意:这里用到的是container.RegisterInstance,直接将IMessageService绑定到具体的一个对象了。

运行结果为。

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:蓝狐软件工作室 » IoC实践--ASP.NET MVC5 采用Unity依赖注入View详解
本文标题:IoC实践--ASP.NET MVC5 采用Unity依赖注入View详解
本文地址:http://www.lanhusoft.com/Article/109.html
posted @ 2015-08-17 15:59  清幽紫竹  Views(179)  Comments(0)    收藏  举报