众所周知,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))
{
//..
}
}
}

ASP.NET Core DI概述的更多相关文章

  1. ASP.NET Core MVC 概述

    https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...

  2. ASP.NET Core DI 手动获取注入对象

    ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueServi ...

  3. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  4. ASP.NET Core原理概述

    ASP.NET Core 是一个控制台应用程序,在其 main 方法中创建一个Web服务器,以下是program.cs中的代码: using Microsoft.AspNetCore; using M ...

  5. asp.net core IdentityServer4 概述

    概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...

  6. WebApiClient与Asp.net core DI的结合

    1 WebApiClient 一款基于HttpClient封装,只需要定义c#接口并修饰相关特性,即可异步调用远程http接口的客户端库 WebApiClient WebApiClient.Exten ...

  7. DI in ASP.NET Core

    .NET-Core Series Server in ASP.NET-Core DI in ASP.NET-Core Routing in ASP.NET-Core Error Handling in ...

  8. 用Scrutor来简化ASP.NET Core的DI注册

    目录 背景 Scrutor简介 Scrutor的简单使用 注册接口的实现类 注册类自身 重复注册处理策略 总结 相关文章 背景 在我们编写ASP.NET Core代码的时候,总是离不开依赖注入这东西. ...

  9. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组

    Sorting, filtering, paging, and grouping 7 of 8 people found this helpful By Tom Dykstra The Contoso ...

随机推荐

  1. scanf 函数笔记

    函数声明 int scanf(const char *format, ...); 说明 <返回值> scanf ("<格式化字符串>", <参数表&g ...

  2. SpringBoot项目的parent依赖和配置文件*.properties、*.yml详解

    1.idea创建SpringBoot项目 idea创建SpringBoot项目应该对很多人来说已经是菜到不能到菜的操作了,但是对于初学者小白来说,还是要讲解一下的.打开idea,然后选择Spring ...

  3. 关于远程办公,微软MVP 15年研发团队的经验分享

    今天是2月5日,春节假期结束后的第三天了.为了能够应对来势汹汹的疫情,众多互联网企业纷纷开启了远程办公模式.不知道各团队前两天的远程办公效果如何,我们 Worktile 管理层在大年初四就开始讨论远程 ...

  4. 实验11:EIGRP

    实验8-1:EIGRP 基本配置 实验目的通过本实验可以掌握:(1)在路由器上启动EIGRP 路由进程(2)启用参与路由协议的接口,并且通告网络(3)EIGRP 度量值的计算方法(4)可行距离(FD) ...

  5. Lua使用luasocket http请求例子

    local http=require("socket.http"); local request_body = [[login=user&password=123]] lo ...

  6. kendo ui 实现MVVM

    MVVM                    model----view model----model 实现页面和model之间的动态绑定 grid 支持 events  source  visib ...

  7. Jmeter之安装与环境配置

    前言 本次的教程是Jmeter的安装与配置 1.安装JDK并配置好环境变量,在系统变量中添加JAVA_HOME变量 在系统变量path中添加 %JAVA_HOME%\bin 2.打开Jmeter官网: ...

  8. ImportError: DLL load failed: 找不到指定的模块;ImportError: numpy.core.multiarray failed to import 报错解决

    python程序运行出错,出错的两行主要信息如下: ImportError: DLL load failed: 找不到指定的模块 ImportError: numpy.core.multiarray ...

  9. Redis Cluster 介绍与搭建

    转:http://blog.csdn.net/men_wen/article/details/72853078 Redis Cluster 介绍与搭建 1. Redis Cluster介绍 Redis ...

  10. [Effective Java 读书笔记] 第二章 创建和销毁对象 第二条

    第二条 遇到多个构造器参数时,可以考虑用构建器 当遇到有多个构造器参数时,常见的是用重叠构造器,即: public class TestClass{ public TestClass(int para ...