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

异步线程无法使用IServiceProvider?

具体来说,在异步执行的操作中,我们利用调用上面注入的这个IServiceProvider对象的GetRequiredService方法试图获取一个IFoobar服务实例。...public class HomeController: Controller { private readonly IServiceProvider _requestServices;...二、ApplicationServices与RequestServices 从上图所示的错误消息可以看出,问题出在我们试图利用一个被Dispose的IServiceProvider来获取我们所需的服务实例...我们知道,ASP.NET Core应用在启动和请求处理过程中所需的服务几乎都是由代表DI容器的IServiceProvider提供的。...具体来说,这里存在着两种类型的IServiceProvider对象,一种与当前应用的生命周期保持一致,我们一般将其称为ApplicationServices,另一种则是具体针对每个请求的IServiceProvider

1.3K40

揭秘 .Net Core 中的 IServiceProvider

在本文中,我们将全面了解IServiceProvider。 .NET Core中的IServiceProvider接口是依赖注入(DI)系统的核心部分。...理解IServiceProvider的工作原理以及如何有效地使用它,对于构建模块化且易于维护的应用程序至关重要。...关键概念 服务提供程序:IServiceProvider接口提供了一种从依赖注入容器中获取服务实例的方式。它有一个名为GetService的方法,该方法用于检索指定类型的服务对象。...returnView(); } } 高级用法 直接使用IServiceProvider: 虽然构造函数注入是首选的方式,但在某些情况下,你可能需要手动解析服务。...通过理解并遵循这些概念和实践,你可以在.NET Core应用程序中使用IServiceProvider有效地管理依赖关系和服务生命周期。

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

    依赖注入:服务实例的生命周期

    如上图所示的树形层次结构只是一种逻辑结构,从对象引用层面来看,通过某个IServiceScope封装的IServiceProvider对象不需要知道自己的“父亲”是谁,它只关心作为根节点的IServiceProvider...下图从物理层面揭示了IServiceScope / IServiceProvider对象之间的关系,任何一个IServiceProvider对象都具有针对根容器的引用。 ?...就服务实例的提供方式来说,它们之间具有如下的差异: Singleton:IServiceProvider对象创建的服务实例保存在作为根容器的IServiceProvider对象上,所以多个同根的IServiceProvider...Scoped:IServiceProvider对象创建的服务实例由自己保存,所以同一个IServiceProvider对象提供的针对同一类型的服务实例均是同一个对象。...IServiceProvider对象针对服务实例采用的回收释放策略取决于采用的生命周期模式,具体策略主要体现为如下两点: Singleton:提供Disposable服务实例保存在作为根容器的IServiceProvider

    1.5K50

    依赖注入: .NET Core DI框架

    当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServiceProvider的GetService方法,IServiceProvider就会根据对应的服务注册提供所需的服务实例。...目录 一、IServiceProvider 二、构造函数的选择 三、服务范围 四、三种生命周期模式 五、ASP.NET Core应用下的生命周期 六、服务范围检验 一、IServiceProvider...图4从物理层面揭示了IServiceScope/IServiceProvider对象之间的关系,任何一个IServiceProvider对象都具有针对根容器的引用。 ?...就服务实例的提供方式来说,它们之间具有如下的差异: Singleton:IServiceProvider创建的服务实例保存在作为根容器的IServiceProvider上,所有多个同根的IServiceProvider...Scoped:IServiceProvider创建的服务实例由自己保存,所以同一个IServiceProvider对象提供的针对同一类型的服务实例均是同一个对象。

    1K30

    依赖注入:服务消费

    当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServiceProvider的GetService方法即可,IServiceProvider对象就会根据对应的服务注册提供所需的服务实例。...一、IServiceProvider 如下面的代码片段所示,IServiceProvider接口定义了唯一的GetService方法根据指定的类型来提供对应的服务实例。...public interface IServiceProvider { object GetService(Type serviceType); } 针对IServiceProvider对象的创建体现在...如果IServiceProvider对象试图通过调用构造函数的方式来创建服务实例,传入构造函数的所有参数必须先被初始化,所以最终被选择出来的构造函数必须具备一个基本的条件,那就是IServiceProvider...根据我们前面介绍的第一个原则(IServiceProvider对象能够提供构造函数的所有参数),Gux的前两个构造函数会成为合法的候选构造函数,那么IServiceProvider最终会选择哪一个呢?

    98230

    ASP.NET Core 6框架揭秘实例演示:依赖注入基本编程模式

    具体来说,由于Singleton服务实例保存在作为根容器的IServiceProvider对象上,所以能够在多个同根IServiceProvider对象之间提供真正的单例保证。...IServiceProvider对象,实际上是当前IServiceProvider对象的子容器。...Transient和Scoped:所有实现了IDisposable接口的服务实例会被当前IServiceProvider对象保存起来,当IServiceProvider对象的Dispose方法被调用的时候...图2 服务实例的释放 [306]服务范围的验证 Singleton和Scoped这两种不同的生命周期是通过将提供的服务实例分别存放到作为根容器的IServiceProvider对象和当前IServiceProvider...图4 构建IServiceProvider对象针对服务注册有效性的检验

    86130

    依赖注入: 利用容器提供服务

    针对服务实例的提供还有这么一个细节:如果我们在调用GetService或者GetService方法时服务类型设置为IServiceProvider接口,提供的服务实例实际上就是当前的IServiceProvider...由于Singleton服务实例保存在作为根容器的IServiceProvider对象上,所以它能够在多个同根IServiceProvider对象之间提供真正的单例保证。...该对象的ServiceProvider属性返回一个新的IServiceProvider对象,它实际上是当前IServiceProvider对象的子容器。...我们最后利用作为子容器的IServiceProvider对象来提供相应的服务实例。...三、针对服务注册的验证 Singleton和Scoped这两种不同的生命周期是通过将提供的服务实例分别存放到作为根容器的IServiceProvider对象和当前IServiceProvider对象来实现的

    97630

    Dora.Interception,为.NET Core度身打造的AOP框架 :与依赖注入框架的无缝集成

    对于绝大部分AOP框架来说,它们最终都会体现为创建一个能够拦截的“代理对象”来实现对方法调用的拦截,但是.NET Core中针对服务实例的提供完全由通过IServiceProvider接口表示的DI容器来接管...= _clock.GetType()); } } 二、让IServiceProvider直接代理对象 在被依赖类型的构造函数中注入IInterceptable服务的编程方式总显得有点别扭,...我们最终需要解决的还是如何让IServiceProvider直接提供可被拦截的代理对象,为此我对.NET Core依赖注入框架的源代码作了一点很小的改动。...这个经过简单修改的IServiceProvider实现类型就是如下这个InterceptableServiceProvider 类型。...public class Startup { public IServiceProvider ConfigureServices(IServiceCollection services)

    50630

    依赖注入:服务注册

    通过《利用容器提供服务》我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创建的,IServiceCollection...一、IServiceCollection ServiceDescriptor是对某个服务注册项的描述,作为依赖注入容器的IServiceProvider对象正是利用该对象提供的描述信息才得以提供我们需要的服务实例...如果指定的是一个FuncIServiceProvider, object>对象(对应于ImplementationFactory属性),那么该委托对象将作为提供服务实例的工厂。...这主要发生在提供的ServiceDescriptor对象是由服务实例工厂创建的情况,所以上面实例中用来创建ServiceDescriptor的工厂类型分别为FuncIServiceProvider,...Foo>和FuncIServiceProvider, Gux>,而不是FuncIServiceProvider, object>。

    1.5K30

    ASP.NET Core中GetService()和GetRequiredService()之间的区别

    容器的核心 - IServiceProvider接口 ASP.NET Core依赖注入抽象的核心是IServiceProvider接口。该接口实际上是System命名空间中基类库的一部分。...当然,您通常根本不应该直接在代码中使用IServiceProvider。相反,您应该使用标准的构造函数注入,并让框架来承载并在幕后使用IServiceProvider。...直接使用IServiceProvider是服务定位器模式的一个示例。这通常被认为是反模式,因为它隐藏了类的依赖关系。 然而,有些时候你没有选择的余地。...例如,如果您试图将服务注入到属性,或者在配置DI容器时使用“转发”类型,则需要直接使用IServiceProvider。...摘要 GetService()是IServiceProvider上的唯一方法,ISeviceProvider是ASP.NET核心DI抽象中的中央接口。

    1.8K60

    依赖注入: .NET Core DI框架

    包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象。...Cat中的服务注册是通过一个类型为ServiceRegistry的对象表示的,在IServiceCollection/IServiceProvider为核心的DI框架中,与之对应的类型为ServiceDescriptor...如果指定的是一个FuncIServiceProvider, object>对象(对应于ImplementationFactory属性),那么IServiceProvider对象将会将自身作为输入参数调用该委托对象来提供服务实例...这种情况主要发生在提供的ServiceDescriptor对象是由服务实例工厂创建的情况,所以上面实例中用来创建ServiceDescriptor的工厂类型分别为FuncIServiceProvider..., Foo>和FuncIServiceProvider, Gux>,而不是FuncIServiceProvider, object>。

    1.1K50
    领券