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类

public class UserInfo
 {
        public int ID { get; set; }
        public string UserName { get; set; }
        public int Age { get; set; }
 }

2、定义Controller

    using MVC5DependencyInjection.Abstract;
    using System;
    using System.Collections.Generic;
    using System.linq;
    using System.Web;
    using System.Web.Mvc;
    namespace MVC5DependencyInjection.Controllers
    {
        public class UserController : Controller
        {
            private IUser service;
            public UserController(IUser service)
            {
                this.service = service;
            }
            public ActionResult Index()
            {
                var data = this.service.GetUsers();
                return View(data);
            }
            
     }
    }

3、定义UserController 的Index的视图

    @model List
    @{
        ViewBag.Title = "Index";
    }
    

Index

@foreach (var item in Model) { }
ID UserName Age
@item.ID @item.UserName @item.Age

4、定义UserController用到的数据访问接口IUser

    namespace MVC5DependencyInjection.Abstract
    {
        public interface IUser
        {
            List GetUsers();
        }
    }

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

    namespace MVC5DependencyInjection.Concrete
    {
        public class SimpleUser:IUser
        {
            public List GetUsers()
            {
                var list = new List();
                for (int i = 0; i < 10; i++)
                {
                    list.Add(new UserInfo() { ID = i, UserName = "Uer"+i, Age = i });
                }
               
                return list;
            }
        }
    }

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


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

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

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


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

    using Microsoft.Practices.Unity;
    using MVC5DependencyInjection.Abstract;
    using MVC5DependencyInjection.Concrete;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    using Unity.Mvc4;
     
    namespace MVC5DependencyInjection
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
     
                //注入 Ioc
                var container = this.BuildUnityContainer();
                DependencyResolver.SetResolver(new UnityDependencyResolver(container));
            }
     
            IUnityContainer BuildUnityContainer()
            {
                var container = new UnityContainer();
                container.RegisterType();
                return container;
            }
        }
    }

对照你的项目的Global.asax在里面加入上面的注入IoC相关的代码,上面的代码是最核心的,要使依赖注入生效必须要上面的代码。


最终运行的结果为:

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











你可能感兴趣的:(C#)