六、單列模式
阿新 • • 發佈:2019-03-21
public exc HERE 類型 doc light object resolv cti
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Common; using Microsoft.AspNetCore.Mvc; namespace OTA.Controllers { public class IndexController : Controller { public IActionResult Index() { Common.G<H>.Resolve.h(); string s=Common.G<H>.Resolve.hh(); ViewBag.Message = s; return View(); } } // 調用的方法。 public class H { public void h() { //return 2; Console.WriteLine("H2"); } public string hh() { return "GG2"; } } }
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <h3>@ViewBag.Message</h3> </body> </html>
單列封裝的類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //UnitOfWork namespace Common { //四、特例 這個實現不需要指定一個類 public class UnitOfWork //2、點列類加一個封裝 { private Dictionary<Type, Lazy<object>> Services { get; set; } private UnitOfWork()//構造函數 的時候new 一個Server 鍵值集合 { Services = new Dictionary<Type, Lazy<object>>(); } //單列模式-懶漢模式 static UnitOfWork instance; //或者 static F instance=null 寫法 static object locker = new object(); //返回對象實例用到的鎖 private static UnitOfWork Instance //通過屬性方式返回對象實例 { get { lock (locker) { if (instance == null) instance = new UnitOfWork(); return instance; } } } public static T Resolve<T>() where T : new()//不過它調用的是這個 即定義公有方法提供一個全局訪問點,同時你也可以定義公有屬性來提供全局訪問點 { Lazy<object> service; if (Instance.Services.TryGetValue(typeof(T), out service)) { return (T)service.Value; } else { Instance.Services[typeof(T)] = new Lazy<object>(() => new T()); return Resolve<T>(); //throw new KeyNotFoundException(string.Format("Service not found for type ‘{0}‘", typeof(T))); } } } // 1、封裝單列類的,這樣單列類就不會對外公開使用了 public static class G<T> where T : new() //使用的時候可以指定類型,這樣就可以在類內使用 要求: G類必須Status 且<T>泛型 好像加不加都行 為什麽 { public static void g() { Console.WriteLine("封裝的外部類"); } public static T Resolve //單列不一定是返回自己,也可能返回其他的對象,這個“單”說的就是返回的對象永遠的一個 { get { return UnitOfWork.Resolve<T>();//這裏的T就是類 } } } }
六、單列模式