標籤:並且 最新 類庫 系統重構 reg global 屬性 mvc5 html
一、概述
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(); } }}
e、在Index.cshtml找個地方寫入@ViewBag.Msg 就可以,如
<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