众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化。

  预定义依赖

1: IApplicationBuilder:提供了配置应用程序的请求管道机制

2:ILoggerFactory:次类型提供了创建记录器组件的模式

3:LHostinEnvironment:此类型提供管理应用程序运行的Web宿主环境的信息。

  注册自定义依赖

为了注册类型,需要让系统知道如何将一个抽象类型解析为一个具体类型,这种映射可以是静态设定,也可以是动态的。

  public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ICustomerService, CustomerService>();
}

每当请求一个实现了ICustomerService的类型的实例时,系统返回CustomerService的一个实例,特别是,AddTransient方法确保了每次都会返回CustomerSerivce类型的一个新实例。

静态解析有时候有一定的局限性。事实上,如果需要根据运行时条件将类型T解析为不同的类型,它允许指定一个回调函数来解析依赖

public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<ICustomerService>(provider=> {
var context = provider.GetRequiredService<IHttpContextAccessor>();
if (SomeRuntimeConditionHolds(context.HttpContext.User))
return new CustomerServiceMatchingRuntionCondition();
else
return new DefaultCustomerService();
});
}

  收集配置数据

我们都知道之前的配置都是用web.config文件类获取配置,那么在Core中他们提供了一个更加丰富,复杂的基础结构。

它配置是基于 名称-值 对列表。1:Json数据提供程序,2:环境变量提供程序,3:内存提供程序。4:自定义配置提供程序。

关于自定义配置,我们需要实现一个IConfigurationSource接口的类,但是,在实现的时候,还需要引用一个集成自ConfigurationProvider的自定义类

public class MyDatabaseConfigSoure : IConfigurationSource
{ public IConfigurationProvider Build(IConfigurationBuilder builder)
{
throw new MyDatabaseConfigProvider();
}
} public class MyDatabaseConfigProvider : ConfigurationProvider
{
private const string ConnectionString = "";
public override void Load()
{
using (var db = new MyDatabaseContext(ConnectionString))
{
//..
}
}
}

最新文章

  1. python 反射
  2. TSql CTE 递归原理探究
  3. springmvc之前后台传值
  4. Mysql进阶(二)
  5. C#消息模拟
  6. codeforces Round #347 (Div. 2) C - International Olympiad
  7. java缓存算法【转】
  8. POJ1845 数论 二分快速取余
  9. 手动添加PopMenu出现的问题
  10. iOS中的项目新特性页面的处理
  11. Eclipse中javascript文件 clg 变为console.log();
  12. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联
  13. HashMap实现原理和源码解析
  14. Centos 安装dhcp及简单配置
  15. [20170705]理解linux su命令.txt
  16. NuGet 使用笔记
  17. Python排序算法之快速排序
  18. Ubuntu/Debian 8 安装 Intel realsense 摄像头驱动
  19. Codeforces 438D The Child and Sequence - 线段树
  20. 02:OC和C对比

热门文章

  1. qsort 函数笔记
  2. python数据类型之字典操作
  3. 集合详解之 Map
  4. pymysql连接提示format: a number is required, not str
  5. 迭代器中set的使用
  6. java刷题(1-5)
  7. 重磅!K8S 1.18版本将内置支持SideCar容器。
  8. 死磕mysql(2)
  9. 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)
  10. HDU_3853_概率dp