程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了AddSingleton<TService, TImplementation>() 如何工作大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决AddSingleton<Tservice, TImplementation>() 如何工作?

开发过程中遇到AddSingleton<Tservice, TImplementation>() 如何工作的问题如何解决?下面主要结合日常开发的经验,给出你关于AddSingleton<Tservice, TImplementation>() 如何工作的解决方法建议,希望对你解决AddSingleton<Tservice, TImplementation>() 如何工作有所启发或帮助;

我是依赖注入的新手,我在 asp.net 核心项目中遇到了这一行代码

services.AddSingleton<Tservice,TImplementation>()
@H_502_5@

我很困惑“Tservice,TImplementation”用于告诉编译器将返回或/并传递给方法的泛型类型,我对吗?但是有问题的方法没有采用我缺少的任何参数?该方法不应该是这样的

services.AddSingleton<Tservice,TImplementation>(Tservice a,TImplementation b)
@H_502_5@

这个问题已经被问到 AddSingleton<>() vs AddSingleton() 但我不清楚答案,有人可以解释一下这是如何工作的吗?

解决方法

此方法采用两个类型参数 TserviceTImplementation,以及零个方法参数

这个方法的完整签名和实现看起来像

public static IserviceCollection AddSingleton<Tservice,TImplementation>(this IserviceCollection services)
    where Tservice : class
    where TImplementation : class,Tservice
{
    if (services == null)
        throw new ArgumentNullException(nameof(services));
    return services.AddSingleton(typeof(TservicE),typeof(TImplementation));
}

类型参数告诉您作为开发人员,您应该期望 IoC 容器对 Tservice 的任何解析都将返回 TImplementation 的单个实例。 where TImplementation : class,Tservice 的类型安全检查表明返回的实际类必须实现(或成为)Tservice

实际的 TImplementation如何创建的,取决于容器,并依赖于 TImplementation 的构造函数上的零个或多个构造函数参数。

您的问题“该方法不应该看起来像这样”,通常答案是“不”。原因是该签名要求您有两个实际对象(实际上可能是一个对象通过了两次)已经构建@H_197_47@,这通常首先违背了依赖注入的目的。

类型参数不必@H_197_47@对应于实际的方法参数,尽管它们经常(通常)这样做。在这种特殊情况下,类型参数本身作为 Type 类型的实际参数传递给另一个方法,然后 IoC 实现的其余部分使用这些参数来创建正确的对象。

那么他们为什么要这样做而不只是拥有services.AddSingleton(Type serviCEType,Type implementationTypE)?。答案在于类型安全。此签名不是类型安全的,因为您可以调用 services.AddSingleton(typeof(Animal),typeof(HousE)),这没有意义并且会在运行时失败。相比之下,services.AddSingleton<Animal,House>() 甚至无法编译。

大佬总结

以上是大佬教程为你收集整理的AddSingleton<TService, TImplementation>() 如何工作全部内容,希望文章能够帮你解决AddSingleton<TService, TImplementation>() 如何工作所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:如何工作