简介: 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