首页
学习
活动
专区
圈层
工具
发布

asp.net core的DI框架思考以及服务实例的获取方式总结

转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/ 整个asp.net core管道从WebHostBuilder到WebHost到后续请求的类中,...此时的实例化也是基于该ServicesCollection中注册的服务。它的生命周期是应用程序从创建到结束的期间。也就是整个aspnet core整个管道的生命周期。...asp.net core的DI框架中服务的注册和服务实例化就是从这里开始的,贯彻到整个管道中.......这也是aspnet core的DI框架三大生命周期中“Scope”含义:指的是针对每个HTTP请求的上下文,也就是服务范围的生命周期与每个请求上下文绑定在一起。...总结一下aspnet core获取注册服务的实例如下: IServiceProvider.CreateScope() IServiceProvider.GetRequestService<IServiceScopeFactory

54320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【ASP.NET Core 基础知识】--依赖注入(DI)--在ASP.NET Core中使用依赖注入

    1.2 定义服务 在ASP.NET Core中实现依赖注入的第二步是定义服务。服务是应用程序中需要注入到其他组件的对象或类。服务可以是瞬态、作用域或单例的,这取决于它们是如何注册的。...如果服务类没有对应的接口或基类,也可以直接创建一个类,但最好还是提供一个接口或基类以支持依赖注入的灵活性。...定义接口或基类: 如果你创建了一个服务类,那么应该为它定义一个接口或基类,以便其他组件可以依赖注入这个服务。 接口或基类定义了服务的公共行为,而具体的实现则由服务类来完成。...使用依赖注入容器:如果可能,使用DI容器提供的API来获取服务,而不是直接调用服务定位器的解析方法。 提供清晰的文档:如果使用了服务定位器模式,确保文档清晰地说明为什么需要这样做,以及如何使用。...在依赖注入(DI)中,控制反转通常指的是将对象创建和管理的工作从应用程序代码中移除,转而由外部容器(如ASP.NET Core内置的DI容器)来完成。

    1.9K01

    .NET 云原生架构师训练营(模块二 基础巩固 依赖注入)--学习笔记

    2.2.1 核心模块--依赖注入 什么是依赖注入 .NET Core DI 生命周期 服务设计 服务范围检查 ASP.NET Core 依赖注入:https://docs.microsoft.com/zh-cn.../aspnet/core/fundamentals/dependency-injection?...依赖注入 与 依赖查找 依赖注入:通过编排告诉 IOC 容器整个内部类之间的依赖关系 依赖查找:通过回调或者上下文获取依赖 asp .net core 如何实现 在上一小节新建的 HelloApi 项目中修改..."); } } } .NET Core DI 生命周期 // 依赖注入 // 任何时候获取到的都是一个新的实例 services.AddTransient类和静态成员,不要使用全局状态,而改为使用全局单例类 不要在内部自己实例化对象 每一个服务应该尽可能地小、易创建、易测试 服务范围检查 singleton 的服务不能依赖于 scoped 的服务

    39610

    Core官方DI剖析(1)--ServiceProvider类和ServiceCollection类

    前段时间看了蒋老师的Core文章,对于DI那一块感觉挺有意思,然后就看了一下Core官方DI的源码,这也算是第一个看得懂大部分源码的框架,虽然官方DI相对来说特别简单, 官方DI相对于其它框架(例如 autofac...)使用起来麻烦许多,既没有一次注入程序集中所有类的功能,也没有方便的属性注入,所以感觉起来官方的DI框架只是一个简单的标准, ?...,这两个类也是注册时使用的类 ServiceDescriptor,ServiceCollection 这两个类是我们使用注册服务的两个类型,注册服务时,DI都会封装成一个`ServiceDescriptor...,但是这是重载都是一些"虚"方法,其最终只是使用了3个方法进行注册 // 使用基类和派生类类型实例化ServiceDescriptor对象,然后进行缓存, private static IServiceCollection...`的方法进行判断获取实例化的实际类型, ?

    1.3K10

    Core官方DI剖析(1)--ServiceProvider类和ServiceCollection类

    前段时间看了蒋老师的Core文章,对于DI那一块感觉挺有意思,然后就看了一下Core官方DI的源码,这也算是第一个看得懂大部分源码的框架,虽然官方DI相对来说特别简单, 官方DI相对于其它框架(例如 autofac...Core文章中也推荐了建议不要使用这种模式 首先从`ServiceDescriptor`和`ServiceCollection`来认识,这两个类也是注册时使用的类 ServiceDescriptor,ServiceCollection...:bell:ServiceCollectionServiceExtensions 扩展类则以上面例子那样进行传入基类与派生类类型(派生类对象或工厂) **ServiceCollection类型可用成员...,但是这是重载都是一些"虚"方法,其最终只是使用了3个方法进行注册 // 使用基类和派生类类型实例化ServiceDescriptor对象,然后进行缓存, private static IServiceCollection...`的方法进行判断获取实例化的实际类型, :bell: 访问修饰符是internal,所以此方法并没有对外开放,只允许内部使用 /// /// 获取当前注册类型的实例类型 //

    2.2K40

    拥抱.NET Core系列:Logging (1)

    在之前我们简单介绍了 .NET Core 中的 DI组件,没来及了解的童鞋可以翻翻我之前的文章。 接下来会对 .NET Core 中的 Logging 进行介绍。...如何根据类型确定分类名称? 在扩展方法内部使用了“GetTypeDisplayName(Type type)”来根据类型获取名称(里面有一些逻辑处理,但一般是采用“{命名空间}....日志域可以聚合一类的消息,非常适合同一种类型不同维度的日志记录。 回到目录 日志过滤器 Logging提供了一个包装实现用来实现日志过滤,我们先来看看使用。 ?...回到目录 特殊的Logger => NullLogger 这个我觉得 .NET Core 是从 Orchard“偷”过来的,Orchard 满地的 NullLogger.Instance。...非常可惜的是,1.1.3版本中没有提供 NullLoggerT> 这样的实现。好消息是在 .NET Standard2.0 中已经提供了 NullLoggerT> 的实现。

    86311

    探索 .NET Core 依赖注入的 IServiceCollection

    什么是依赖注入(DI)和DI容器? Microsoft依赖项注入容器只是一组类,它们组合到一个代码库中,这个库会自动创建并管理程序中需要的对象。...瞬时(Transient)和单例(Singleton)模式是相反的,每次使用时,DI容器都是创建一个新的实例。...作用域(Scoped),在一个作用域内,会使用同一个实例,像EF Core的DbContext上下文就被注册为作用域服务。 我们注册服务时会发生什么? 在上面的代码中,我已经注册了两个单例服务。...的一些核心知识,可以直接创建ServiceCollection来使用Microsoft DI框架,了解了IServiceCollection上的AddSingleton扩展方法是如何工作,以及它们最终创建了一个...原文链接: https://www.stevejgordon.co.uk/aspnet-core-dependency-injection-what-is-the-iservicecollection

    4.5K32

    从 MVC 到使用 ASP.NET Core 6.0 的Minimal API

    从 MVC 到使用 ASP.NET Core 6.0 的Minimal API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007...MVC 在MVC中,获得您的控制器时,从ControllerBase您可以访问HttpContext,HttpRequest,HttpResponse和当前用户(ClaimsPrincipal从基类属性..., "Currency": [ "The Currency field is required." ] } } 这是 MVC 过滤器管道如何从您的应用程序中删除重复的一个很好的例子...我在深入研究源代码时发现的一件事是,序列化对象ObjectResult[17]的IResult实现的基类仅支持序列化 JSON。有人告诉我这是设计使然,因为大多数开发人员很少需要支持其他媒体类型。...作为 ASP.NET Core 开发人员,您现在在如何构建 API 方面有多种选择,这只能是一件好事。如果您希望本文涵盖任何其他功能,请在Twitter 上联系[21]。

    9.2K10

    从ASP.NET Core2.2到3.0你可能会遇到这些问题

    So,就用vs2019+.NET Core3.0来跟着做一下Contoso University这个WEB应用,但是在基于3.0进行操作的时候遇到了一些问题,所以我就查看了微软的《从 ASP.NET Core...2.0升3.0升级指南 就着今天遇到的问题,所以我整理下ASP.NET Core从2.0升级3.0的一个升级指南,希望对大伙有所帮助,当然大伙也可以直接阅读微软的官方文档进行查看。...下面的代码显示了生成 ASP.NET Core 3.0 模板Program类: public class Program { public static void Main(string[] args...从WebHostBuilder到HostBuilder最显著的变化是依赖关系注入 (DI)。...HostBuilder DI 约束: 使DI容器只能构建一次。 避免产生的对象生存期问题,例如解决多个单例实例。

    1.8K20

    【5min+】后台任务的积木。.NetCore中的IHostedService

    前言 这次终于可以给大家分享一些AspNet Core方面的东西了?。虽然本次提及的内容是.NET Core通用,但将以AspNet Core为例作为介绍。...IHostService 请注意 IHostedService 是从 .NET Core 提出的,所以可以看到它并不是专门只针对于 AspNet Core。...在AspNet Core中的作用 那么如果是咱们要在AspNet Core中使用它,该如何操作呢?...那么是否意味着我们可以在自定义的 IHostedService 使用DI容器中的服务呢,或者说在自定义任务中注入其它类。 答案是:肯定的。...理由是,HostService既然在Configure之前,就证明它目前所在的范围作用域还是在 “根” 级别上,所以当您注入一个非单例级别的类会提示您“无法在根范围获取一个对象”。

    1.8K20
    领券