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 

原文地址:https://www.cnblogs.com/2018clg/p/10948694.html