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

我之前写的文章一般都有通过Autofac来实现IoC,这次我来换一个框架,体会一下ASP.NET mvc5 采用Unity依赖注入Controller。此之前说说一下Unity框架。

Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入(Constructor Injection)、属性注入(Property Injection),以及方法调用注入(Method Call Injection).现在Unity最新的版本的1.2版,可以在微软的开源站点http://unity.codeplex.com下载最新的发布版 本和文档。通过使用Unity,我们能轻松构建松耦合结构的程序,从而让整个程序框架变得清晰和易于维护。

下面我通过一个具体的mvc的例子来说明一下怎么用。这个例子是简单的列表展示,为了让例子简单我这这里就没用数据库,数据直接写死了。

1、定义展示数据的model类


  1. public class UserInfo
  2. {
  3. public int ID { get; set; }
  4. public string UserName { get; set; }
  5. public int Age { get; set; }
  6. }

2、定义Controller


  1. using MVC5DependencyInjection.Abstract;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.linq;
  5. using System.Web;
  6. using System.Web.Mvc;
  7. namespace MVC5DependencyInjection.Controllers
  8. {
  9. public class UserController : Controller
  10. {
  11. private IUser service;
  12. public UserController(IUser service)
  13. {
  14. this.service = service;
  15. }
  16. public ActionResult Index()
  17. {
  18. var data = this.service.GetUsers();
  19. return View(data);
  20. }
  21. }
  22. }

3、定义UserController 的Index的视图


  1. @model List<MVC5DependencyInjection.Models.UserInfo>
  2. @{
  3. ViewBag.Title = "Index";
  4. }
  5. Index</h2>

  6. IDth>
  7. UserName</th>
  8. Ageth>
  9. </tr>
  10. @foreach (var item in Model)
  11. {
  12. @item.IDtd>
  13. @item.UserName</td>
  14. @item.Agetd>
  15. </tr>
  16. }
  17. table>
  18. 4、定义UserController用到的数据访问接口IUser

    
    
    1. namespace MVC5DependencyInjection.Abstract
    2. {
    3. public interface IUser
    4. {
    5. List<UserInfo> GetUsers();
    6. }
    7. }

    5、定义接口IUser一个实现类SimpleUser

    
    
    1. namespace MVC5DependencyInjection.Concrete
    2. {
    3. public class SimpleUser:IUser
    4. {
    5. public List<UserInfo> GetUsers()
    6. {
    7. var list = new List<UserInfo>();
    8. for (int i = 0; i < 10; i++)
    9. {
    10. list.Add(new UserInfo() { ID = i, UserName = "Uer"+i, Age = i });
    11. }
    12. return list;
    13. }
    14. }
    15. }

    6、使用nuget为项目增加Unity相关的包

    选中mvc的那个项目右键“管理NuGet 程序包”在弹出的窗口中输入Unity搜索,在结果选中Unity.MVC4点击安装。

    IoC实践--ASP.NET MVC5 采用Unity依赖注入Controller详解_第1张图片

    这里只有MVC4的Unity但是MVC5一样的用,不影响。

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

    
    
    1. using Microsoft.Practices.Unity;
    2. using MVC5DependencyInjection.Abstract;
    3. using MVC5DependencyInjection.Concrete;
    4. using System.Web.Mvc;
    5. using System.Web.Optimization;
    6. using System.Web.Routing;
    7. using Unity.Mvc4;
    8. namespace MVC5DependencyInjection
    9. {
    10. public class MvcApplication : System.Web.HttpApplication
    11. {
    12. protected void Application_Start()
    13. {
    14. AreaRegistration.RegisterAllAreas();
    15. FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    16. RouteConfig.RegisterRoutes(RouteTable.Routes);
    17. BundleConfig.RegisterBundles(BundleTable.Bundles);
    18. //注入 Ioc
    19. var container = this.BuildUnityContainer();
    20. DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    21. }
    22. IUnityContainer BuildUnityContainer()
    23. {
    24. var container = new UnityContainer();
    25. container.RegisterType<IUser, SimpleUser>();
    26. return container;
    27. }
    28. }
    29. }
    对照你的项目的Global.asax在里面加入上面的注入IoC相关的代码,上面的代码是最核心的,要使依赖注入生效必须要上面的代码。


    最终运行的结果为:

    IoC实践--ASP.NET MVC5 采用Unity依赖注入Controller详解_第2张图片

    你可能感兴趣的:(技术类别,mvc,loc,控制反转)