AutoFac
一、AutoFac介紹
Autofac是.NET里IOC(Inversion of Control,控制反轉(zhuǎn))容器的一種,同類的框架還有Spring.NET,Unity,Castle等??梢酝ㄟ^NuGet方式添加到項(xiàng)目中使用。
官方網(wǎng)站:http://autofac.org/
Autofac相對(duì)于其它的IoC框架優(yōu)點(diǎn):
1 . 它是C#語言聯(lián)系很緊密,也就是說C#里的很多編程方式都可以為Autofac使 用,例如可以用Lambda表達(dá)式注冊(cè)組件。2. 較低的學(xué)習(xí)曲線,學(xué)習(xí)它非常的簡單,只要你理解了IoC和DI的概念以及在何時(shí)需要使用 它們。3. XML配置支持。 4. 自動(dòng)裝配。 5. 與Asp.NetMVC集成。6. 微軟的Orchad開源程序使用的就是Autofac,從該源碼可以看出它的方便和強(qiáng)大。二、什么是控制反轉(zhuǎn)(IOC)、依賴注入(DI)
控制反轉(zhuǎn)(Inversion of Control,縮寫為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。Michael Mattson在1996年首次提出IoC的概念,IoC把創(chuàng)建和查找依賴對(duì)象的控制權(quán)交給了容器,由容器進(jìn)行注入組合對(duì)象,所以對(duì)象與對(duì)象之間是松散耦合,而傳統(tǒng)應(yīng)用程序都是由我們?cè)陬悆?nèi)部主動(dòng)創(chuàng)建依賴對(duì)象,從而導(dǎo)致類與類之間高耦合。
依賴注入(Dependency Injection,簡稱DI),早在2004年,Martin Fowler就提出了“哪些方面的控制被反轉(zhuǎn)了?”這個(gè)問題。他總結(jié)出是依賴對(duì)象的獲得被反轉(zhuǎn)了,獲得依賴對(duì)象的過程由自身管理變?yōu)榱擞蒊OC容器主動(dòng)注入。于是,他給“控制反轉(zhuǎn)”取了一個(gè)更合適的名字叫做“依賴注入”。
三、AutoFac應(yīng)用
1.添加引用
Autofac.dll,autofac框架核心類庫
Autofac.Integration.Mvc.dll,autofac框架對(duì)mvc的支持庫
Autofac.Configuration.dll,autofac框架獲取xml配置庫
2.創(chuàng)建autofac容器,注入對(duì)象
/// <summary> /// 依賴注入接口 /// </summary> public interface IinjectContainer {void RegisterType<T>();T Resolve<T>(); }public class AutoFacContainer : IinjectContainer
{
private ContainerBuilder builder;
private IContainer container;
public AutoFacContainer()
{
//創(chuàng)建autofac容器
builder = new ContainerBuilder();
3.IService及繼承IService接口項(xiàng)目代碼,web.config中autofac框架xml配置代碼
/// <summary> /// IService空接口,autofac批量注入時(shí)使用 /// </summary> public interface IService: IDisposable {}/// <summary> /// 實(shí)現(xiàn)IService接口的具體接口 /// </summary> public interface IEOP_OrderInfoService : SQLTool.Service.IService {List<EOP_OrderInfo> GetOrderInfo(); }/// <summary> /// 實(shí)現(xiàn)接口的類 /// </summary> public class EOP_OrderInfoService : ServiceBase, IEOP_OrderInfoService {/// <summary>/// 實(shí)現(xiàn)方法/// </summary>/// <returns></returns>public List<EOP_OrderInfo> GetOrderInfo(){//具體業(yè)務(wù)邏輯代碼,項(xiàng)目中用ef框架查詢的數(shù)據(jù),測試的時(shí)候可以返回個(gè)字符串進(jìn)行測試var list = Context.EOP_OrderInfo.ToList();return list;} }xml配置文件代碼
4.創(chuàng)建對(duì)象容器
public class ObjectContainer {private static ObjectContainer current;private static IinjectContainer container;public ObjectContainer(IinjectContainer inversion){container = inversion;}public static ObjectContainer Current{get{if (current == null){RegisterAutoFac(container);}return current;}}/// <summary>/// 注冊(cè)autofac/// </summary>/// <param name="autofac"></param>public static void RegisterAutoFac(IinjectContainer autofac){container = autofac;current = new ObjectContainer(container);}public T Resolve<T>(){return container.Resolve<T>();} }5.在Global.asax中調(diào)用autofac框架
protected void Application_Start()
{
…
5.Controller中調(diào)用
public class HomeController : Controller {public IEOP_OrderInfoService _iEOP_OrderInfoService;public HomeController(){}public HomeController(IEOP_OrderInfoService iEOP_OrderInfoService){this._iEOP_OrderInfoService = iEOP_OrderInfoService;}public ActionResult Index(){//方式1.構(gòu)造器注入調(diào)用var list = _iEOP_OrderInfoService.GetOrderInfo();//方式2.使用容器Resolve調(diào)用var list1 = ObjectContainer.Current.Resolve<IEOP_OrderInfoService>().GetOrderInfo();if (list.Count > 0){//log4net日志Core.Log.Debug("測試 : EOP_OrderInfo " + list.FirstOrDefault() == null ? "沒數(shù)據(jù)" : list.FirstOrDefault().ClientID);}else{//log4net日志Core.Log.Debug("測試 : EOP_OrderInfo 啥都沒有");}return View();} }6.項(xiàng)目目錄結(jié)構(gòu)圖
原文:https://blog.csdn.net/u011301348/article/details/82256791
總結(jié)
- 上一篇: 刀模绘图软件 圆刀绘图软件 圆棍绘图软件
- 下一篇: 对比分析杨氏双缝干涉和insar参考面模