Asp.Net Ioc框架入門之一 Unity
一、概述
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