zoukankan      html  css  js  c++  java
  • Autofac依赖注入框架使用

    简介: Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上非常高

    控制反转和依赖注入:

    控制反转 IOC(Inverse Of  Control) :  简单通俗的说,就是本来创建对象的实例,由我们程序员自己创建,现在交给IOC容器来创建,所以称为控制反转。

    依赖注入DI(Dependence injection) :  容器创建好实例后再注入,称为依赖注入。

    主要应用: 实现各个层之间的解耦。每个层调用的都是接口,而不是具体的类. 好处就是以后需要对代码做修改的话,只需要将写好的代码编译成dll 替换原来程序中的dll,无需重新编译。 本来创建接口对象的过程由我们自己创建,利用抽象工厂模式,配合反射也可以达到解耦. 现在创建接口对象的过程由IOC容器创建.达到解耦

    使用Demo: 这个Demo主要演示的就是在UI层通过Autofac来帮我们创建IBLL的实例

    控制器:

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接:http://anneke.cn/ArticleInfo/Detial?id=4
    来源:Anneke.cn
    
    public ActionResult Index()
     {
            ITestBLL testBLL = Container.Resolve<ITestBLL>();
            ViewBag.Name = testBLL.GetName();
            return View();
     }

    IBLL:

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接: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容器:

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    作者:卷猫
    链接: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

  • 相关阅读:
    Python-TXT文本操作
    Appium-处理系统弹窗
    Appium-服务关键字
    App Inspector-iOS真机功能详解
    Appium+Python3+iOS真机环境搭建
    Appium-超过60s的应用场景如何处理
    python-入门的第一个爬虫例子
    Mysql(五) JDBC
    Mysql(四)正则表达式
    Mysql(三)约束
  • 原文地址:https://www.cnblogs.com/zzqvq/p/5814416.html
Copyright © 2011-2022 走看看