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<MVC5DependencyInjection.Models.UserInfo>
    @{
        ViewBag.Title = "Index";
    }
    <h2>Index</h2>
    <table class="table">
        <tr>
            <th>ID</th>
            <th>UserName</th>
            <th>Age</th>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.ID</td>
                <td>@item.UserName</td>
                <td>@item.Age</td>
            </tr>
        }
    </table>

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

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

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

    namespace MVC5DependencyInjection.Concrete
    {
        public class SimpleUser:IUser
        {
            public List<UserInfo> GetUsers()
            {
                var list = new List<UserInfo>();
                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点击安装。


这里只有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<IUser, SimpleUser>();
                return container;
            }
        }
    }

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


最终运行的结果为:












  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值