ASP.NET Core DI概述
程序员文章站
2024-02-05 15:37:40
众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化。 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory:次类型提供了创建记录器组件的模式 3:LHostinEnvironment:此类型提供管理应用程序运 ......
众所周知,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概述
-
ASP.NET Core 3.x 中间件流程与路由体系
-
[ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问题
-
(26)ASP.NET Core EF保存(基本保存、保存相关数据、级联删除、使用事务)
-
酷学习笔记——ASP.NET Core 简介
-
asp.net core 使用 signalR(一)
-
ASP.NET Core中使用MialKit实现邮件发送
-
ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)
-
asp.net core系列 70 即时通迅-WebSocket+Redis发布订阅
-
在ASP.NET Core中使用百度在线编辑器UEditor