首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

异步线程无法使用IServiceProvider

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

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

依赖注入: .NET Core DI框架

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

73630

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

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

1.2K50

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)

37730

依赖注入:服务消费

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

64430

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

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

1.3K60

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

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

61130

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

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

70230

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

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

1.4K20

Core官方DI解析(2)-ServiceProvider

GetServices()和GetRequiredService()方法,还实现了获取子容器方法CreateScope(),下面来具体的看一下这个类型 从下面代码看到ServiceProvider一个实现了三个接口 IServiceProvider...validateScopes时使用的,接口具有两个方法OnCreate()和OnResolve()分别用于创建服务实例时缓存和校验,​ public sealed class ServiceProvider : IServiceProvider...前面已经说过目前DI只使用了Dynamic这一种,下面说IServiceProviderEngineCallback时也只说这一种 public sealed class ServiceProvider : IServiceProvider...class ServiceProviderServiceExtensions { // 泛型重载 public static T GetService(this IServiceProvider...return (IEnumerable)provider.GetRequiredService(genericEnumerable); } // 创建一个子IServiceProvider

55520

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券