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 Day 29 socket、scoket套接字分类、基于TCP的socket、常见错误
    Python Day 28 网络编程、OSI七层模型、三次握手和四次挥手
    Python Day 27 元类、__inti__方法、__new__方法、__call__方法、单例模式、exec与eval区别、异常处理语法
    get,post区别
    Restful API
    tcp 3次握手四次挥手
    mongodb数据库常用操作的整理
    python装饰器
    python中的*args和** kwargs区别
    Vue插件
  • 原文地址:https://www.cnblogs.com/zzqvq/p/5814416.html
Copyright © 2011-2022 走看看