zoukankan      html  css  js  c++  java
  • Aps.Net WebApi依赖注入

    在开始之前,让我们先来了解一下什么是依赖注入?

    在编程中,依赖注入是一种实现控制反转且用于解决依赖性问题的设计模式。一个依赖关系指的是可被利用的一种对象 。依赖注入是将所依赖的传递给将要使用的从属对象。该服务将会变成客户端状态的一部分并传递服务给客户端,而不允许客户端来建立或寻找服务。依赖注入使我们的编程代码变得松散耦合,易于管理。

      依赖注入的类型:

    构造函数注入:在构造函数注入中,注入器通过客户端类构造函数提供服务(依赖性)。

    属性注入:在属性注入(又名Setter注入)中,注入器通过客户端类的公共属性提供依赖性。

    方法注入:在这种类型的注入中,客户端类实现一个接口,该接口声明方法以提供依赖性,并且注入器使用此接口来提供对客户端类的依赖性。

    依赖注入的好处:

    • 减少依赖性
      • 依赖注入可以消除或者减少组件间不必要的依赖性。以降低组件改变时所带来的影响组件
    • 增强可重用性
      • 减少组件依赖性可以增强组件的可重用性。如果在不同的上下文中需要某个接口的不同实现,或者只是同一实现的不同配置,则可以将该组件配置为使用该实现。无需更改代码。
    • 增加代码的可测试性
      • 依赖注入也增加了组件的可测试性。当依赖项可以注入组件时,意味着可以注入这些依赖项的模拟实现。模拟对象用于测试作为实际实现的替代,并且可以配置模拟对象的行为
    • 增强代码的可读性
      • 依赖注入可将依赖项移动到组件的接口。使得更容易看到组件中哪些具有依赖关系,从而使代码更具可读性。
    • 减少依赖性承载
      • 依赖性承载会在代码中产生大量“噪音”,使其难以阅读和维护,并且使得组件更难测试。而依赖注入可以减少依赖性承载和静态单例的使用,可以将组件完美的连接在一起

    1.首选需要在Nuget中安装Autofac、Autofac.WebApi2

    2.在Global.asax的Application_Start方法中加入如下代码:

    //*依赖注入*/
    var builder = new ContainerBuilder();
    builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
    
    //注入项目名称(将BusinessRepository、MysqlDBRepository项目中的所有对象注入)
    //var BusinessRepository = Assembly.Load("BusinessRepository");
    //var MysqlDBRepository = Assembly.Load("MysqlDBRepository");
    //builder.RegisterAssemblyTypes(BusinessRepository).AsImplementedInterfaces();
    //builder.RegisterAssemblyTypes(MysqlDBRepository).AsImplementedInterfaces();
    
    //单个对象注入(在项目中需要用到注入的对象都必须进行注入)
    builder.RegisterType<ProductBusinessRepository>().As<IProductBusinessRepository>();
    builder.RegisterType<ProductRepository>().As<IProductRepository>();
    
    var container = builder.Build();
    var resolver = new AutofacWebApiDependencyResolver(container);
    GlobalConfiguration.Configuration.DependencyResolver = resolver;    

    3.在控制器中使用依赖注入

     4.获取接口数据

    5.Demo地址:https://pan.baidu.com/s/1XYOLmOQDnTMEW68oM2Q7XQ 

    提取码:6ski 

  • 相关阅读:
    删除指定字符
    Palindromes&nbsp;_easy&nbsp;version
    统计元音
    查找最大元素
    首字母变大写
    Intent加强
    GUI_键盘事件
    GUI_鼠标事件
    GUI_事件监听机制与ActionListener演示
    GUI概述与Frame演示
  • 原文地址:https://www.cnblogs.com/2018clg/p/10948694.html
Copyright © 2011-2022 走看看