.net Core 原生DI使用方法
在使用.net Core中DI(依赖注入时)非常的简单。
首先还是先阐述一下为什么需要使用依赖注入:
在我们为了实现一种功能时 我们有两种选择,
一,直接添加一个类,类中添加具体实现功能的方法
二,为了以后功能的复用和扩展,我们会定义抽象接口 然后用具体的类实现接口的抽象功能,并且子类可以自由实现和扩展
但是使用的前提:子类都需要我们去实例化,接口需要我们去用子类的实例化对象去赋值到父接口(多态)
当一个项目中的接口和类 成百上千时。首先会对我们的编码造成大量的冗余以及资源的浪费。所以依赖注入就是可以很好的解决这种现象的方法之一
在.net Core办法发布时,微软自动集成了依赖注入的使用方法。
用法非常的简单:
首先在你自己的项目中 添加到自己使用的接口和实现类。
项目分层的架构,自己选择。这里时DDD(领域驱动设计)的实例。
我这里分了一共有两层的Service和最后的Repository 以及想对应的 父级接口
其中一个的示例:
这是实现类:
这个是接口:
当写完这些之后 我们的准备工作已经就绪了。
接下来我们需要把服务注册进去。
微软提供了在StartUp.cs中的ConfigureServices方法中注入
但是在注入时 需要注意一点,项目上层级的先后注入顺序非常重要 一定要是最底层的接口和类先注册 然后再依次向上,否则程序会报错
原生提供的DI有几种服务的生命周期的选择
我这里是单例模式
Transient:瞬时的 每次使用都要重新注册
Scoped: 当用Scoped时,他是一次实例的,控制器中创建一个Sample用完之后并不销毁,接着传给View继续用。只要是在同一个Request中就不销毁,直到Request结束销毁,到下一个Request中重新创建一个实例。
Singleton:就是一次创建,无论多少个Request都使用第一次创建的那一个,即所谓单例模式。
当服务注册进去之后,我们就可以使用了 微软推荐使用的时构造函数注入的使用方式,我这里也是使用的这种方式。
示例:
将接口直接通过构造函数注入进来就可以直接使用了 ,当然还有其它的方式 属性注入和接口注入
接口注入的方式现在已经不在使用了 因为他使用的时候需要强制实现一些不必要的接口 但是属性注入和构造函数注册就不需要
但是构造函数注入有一个问题 就是当你的接口的功能非常的庞大和复杂时 需要用到的接口非常非常多,你的构造函数注入的接口就需要写的非常多
这个貌似时可以使用容器优化的,这点再这里不做叙述。
本章就是微软.net Core原生DI的使用方法