概念:依赖注入主要体现了IOC思想,IOC将实现详细信息编写为依赖并且实现了更高级的抽象,因此程序测试性,维护性,模块化程度都更高了。这也就对应了刚刚的那个设计规则–依赖于抽象,而不是具体的实现。
IServiceCollection—负责注册
IServiceProvider—负责提供实例
创建实例的声明周期
1、Transient: 瞬态模式,每次访问都会创建一个新的实例
2、Scoped:域模式,在同一个scope内只初始胡一个实例。
3、Singleton:单例模式,整个应用程序生命周期只创建一个实例。
常用的注入方式有以下三种:
- 最常用的注入方式,以接口的形式暴露服务
- 自己注入自己,以实现形式暴露服务
- 需要传参的构造函数的类的注入
使用依赖注入和服务
需要引用nuget包
- Microsoft.Extensions.DependencyInjection
- Microsoft.Extensions.Options.ConfigurationExtensions(必须引用扩展否则找不到Get)
- Microsoft.Extensions.Configuration.Json(必须安装否则找不到根目录)
导入项目后新建一个名字为appsettings.json文件
创建一个appsettings.cs文件用来保存配置设置。该文件将映射我们在appsettings.json中编写的设置:
导入配置文件:
var config=new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("AppSetting.json",false,true)
.Build();
var res= config.GetSection("AppSetting").Get<AppSetting>();
_Service.Configure<AppSettings>(config.GetSection("AppSettings"));
需要使用的地方
IOptions<AppSettings> //获取配置文件内容
public class AppSettins{
public string AppName{get;set;}
}
创建一个示例服务器
public Interface IsamleService{
task<string>GetCurrentDate();
}
public class SampleService : ISampleService
{
public async Task<string> GetCurrentDate() =>
await Task.FromResult(DateTime.Now.ToLongDateString());
}
在ioc容器中注册服务
services.AddScoped<ISampleService, SampleService>();