簡介: Autofac是一款IOC框架,比較於其餘的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很輕量級性能上很是高git
控制反轉和依賴注入:程序員
控制反轉 IOC(Inverse Of Control) : 簡單通俗的說,就是原本建立對象的實例,由咱們程序員本身建立,如今交給IOC容器來建立,因此稱爲控制反轉。github
依賴注入DI(Dependence injection) : 容器建立好實例後再注入,稱爲依賴注入。框架
主要應用: 實現各個層之間的解耦。每一個層調用的都是接口,而不是具體的類. 好處就是之後須要對代碼作修改的話,只須要將寫好的代碼編譯成dll 替換原來程序中的dll,無需從新編譯。 原本建立接口對象的過程由咱們本身建立,利用抽象工廠模式,配合反射也能夠達到解耦. 如今建立接口對象的過程由IOC容器建立.達到解耦性能
使用Demo: 這個Demo主要演示的就是在UI層經過Autofac來幫咱們建立IBLL的實例ui
控制器:spa
著做權歸做者全部。 商業轉載請聯繫做者得到受權,非商業轉載請註明出處。 做者:卷貓 連接:http://anneke.cn/ArticleInfo/Detial?id=4 來源:Anneke.cn public ActionResult Index() { ITestBLL testBLL = Container.Resolve<ITestBLL>(); ViewBag.Name = testBLL.GetName(); return View(); }
IBLL:code
著做權歸做者全部。 商業轉載請聯繫做者得到受權,非商業轉載請註明出處。 做者:卷貓 連接:http://anneke.cn/ArticleInfo/Detial?id=4 來源:Anneke.cn public interface ITestBLL { string GetName(); }
BLL:對象
著做權歸做者全部。 商業轉載請聯繫做者得到受權,非商業轉載請註明出處。 做者:卷貓 連接:http://anneke.cn/ArticleInfo/Detial?id=4 來源:Anneke.cn public class TestBLL : ITestBLL { public string GetName() { return "卷貓"; } }
IOC容器:blog
著做權歸做者全部。 商業轉載請聯繫做者得到受權,非商業轉載請註明出處。 做者:卷貓 連接:http://anneke.cn/ArticleInfo/Detial?id=4 來源:Anneke.cn /// <summary> /// Autofac IOC類 /// </summary> public class Container { /// <summary> /// IOC 容器 /// </summary> public static IContainer container = null; public static T Resolve<T>() { try { if (container == null) { Initialise(); } } catch (Exception ex) { throw new Exception("IOC實例化出錯!" + ex.Message); } return container.Resolve<T>(); } /// <summary> /// 初始化 /// </summary> public static void Initialise() { var builder = new ContainerBuilder(); //格式:builder.RegisterType<xxxx>().As<Ixxxx>().InstancePerLifetimeScope(); 能夠寫多個 builder.RegisterType<TestBLL>().As<ITestBLL>().InstancePerLifetimeScope(); container = builder.Build(); } }
完整Demo:https://github.com/zhenzhenkeai/AutoFacDemo