在开始之前,让我们先来了解一下什么是依赖注入?
在编程中,依赖注入是一种实现控制反转且用于解决依赖性问题的设计模式。一个依赖关系指的是可被利用的一种对象 。依赖注入是将所依赖的传递给将要使用的从属对象。该服务将会变成客户端状态的一部分并传递服务给客户端,而不允许客户端来建立或寻找服务。依赖注入使我们的编程代码变得松散耦合,易于管理。
依赖注入的类型:
构造函数注入:在构造函数注入中,注入器通过客户端类构造函数提供服务(依赖性)。
属性注入:在属性注入(又名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