1. 程式人生 > >Asp.Net Ioc框架入門之一 Unity

Asp.Net Ioc框架入門之一 Unity

輕量級 practice 松耦合 table protected mic ret sof asp

一、概述

  IOC:英文全稱:Inversion of Control,中文名稱:控制反轉,它還有個名字叫依賴註入(Dependency Injection)。
  作用:將各層的對象以松耦合的方式組織在一起,解耦,各層對象的調用完全面向接口。當系統重構的時候,代碼的改寫量將大大減少。
  依賴註入: 當一個類的實例需要另一個類的實例協助時,在傳統的程序設計過程中,通常有調用者來創建被調用者的實例。然而采用依賴註入的方式,創建被調用者的工作不再由調用者來完成,因此叫控制反轉,創建被調用者的實例的工作由IOC容器來完成,然後註入調用者,因此也稱為依賴註入。

  Unity是微軟Patterns & Practices團隊所開發的一個輕量級的,並且可擴展的依賴註入(Dependency Injection)容器;

  它支持常用的三種依賴註入方式:構造器註入(Constructor Injection)、屬性註入(Property Injection),以及方法調用註入(Method Call Injection)。

  現在Unity最新的版本的4.0版,可以在微軟的開源站點 https://github.com/unitycontainer/unity 下載最新的發布版本。

  通過使用Unity,我們能輕松構建松耦合結構的程序,從而讓整個程序框架變得清晰和易於維護。

二、簡單示例

1.示例1

  創建一個mvc5項目 Web.Mvc,然後在創建一個Business類庫,將類庫添加引用到Web.Mvc項目,在Web.Mvc項目通過nuget添加unity.mvc5

類庫代碼

a、Business類庫定義一個接口IUserService

namespace Business
{
    /// <summary>
    /// 顯示信息
    /// </summary>
    public interface IUserService
    {
        string Display(string mes);
    }
}

b、Business類庫實現接口

namespace Business
{
    public class UserService : IUserService
    {
        
/// <summary> /// 顯示信息 /// </summary> /// <param name="mes"></param> public string Display(string mes) { return "I say:" + mes; } } }

c、註冊依賴使用依賴註入生效

在Web.Mvc項目的Global.asax進行註冊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Business;
using Microsoft.Practices.Unity;
using Unity.Mvc5;

namespace Web.Mvc
{
    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<IUserService, UserService>();
            return container;
        }
    }
}

d、使用

namespace Web.Mvc.Controllers
{
    public class HomeController : Controller
    {

        private IUserService userService;

        public HomeController(IUserService userService)
        {
            this.userService = userService;
        }

        public ActionResult Index()
        {
            ViewBag.Msg = userService.Display("hahaha");
            return View();
        }
   }
}

[email protected] 就可以,如

<h1>ASP.NET - @ViewBag.Msg</h1>

最後運行項目,實現效果

ASP.NET - I say:hahaha

參考網址:

http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html

https://www.lanhusoft.com/Article/108.html

Asp.Net Ioc框架入門之一 Unity