我们委托我们依赖容器的实例。在这里,这个容器是系统本身,在哪里处理所有繁重的任务,而不是试图实现我们自己的依赖注入。从本质上讲,当我们的“询问”类构造器中的依赖项(处理和检索到的对象)中的依赖项我们以及它可能需要的任何依赖性,依此类推。
例如,当我们使用并将其注入我们的结构功能时,会做出所有这些任务的事情。
依赖注入过程中有3个关键步骤
更多的深度理解:
实例化巢容器时,它首先检查是否需要取决于。在我们的示例中,有一个。当巢容器找到依赖项时,它将发现它返回类。这是可以注入程序中的默认行为。然后,Nest将缓存并将其返回到创建的实例,或直接返回缓存。<自下而上>
实际上,以下是一个tapper:
在这本完整的写作中,我们可以清楚地与班级联系
默认情况下,模块封装了其提供商,这意味着这不能注入不直接属于当前模块的提供商,也不能注入不是从模块引入的过程中注入过程。因此,IT是模块的公共接口。
假设我们的新依赖性是从数据库中获得的,并且属于不同的模块,因此我们需要在新的中文中进行指导
使用基于构造函数的注射添加:
目前,如果您直接运行,它将依靠错误。
在这一点上,我们需要将其添加到中国:
现在没有问题...
一些更复杂的情况:
NEST允许我们自定义程序来处理这些情况
它对于注射的连续价值非常有用。例如,在这里我们使用模拟的数据类
目前,每当解析它时,它都会指向它,在任何时候,他们都会在我们的应用中注入它
有时我们可能想灵活地使用弦或符号作为注射中的依赖项
那么我们现在应该使用什么?
我们需要使用类名称来声明依赖项项目,因为这是Nest如何在容器中找到依赖项的方式。
应该注意的是,尽管我们可以使用内部用途来注入装饰,但最好定义一个单独的文件,以便我们可以在整个应用程序中使用它:
然后将其更改为相应的变量<最佳实践>
允许我们动态确定应该解析令牌的类
如果提供商的价值基于其他因素,则允许我们创建一个提供商。因为他们可以注入返回结果所需的其他提供商过程。
有时,我们需要指导程序延迟执行,直到完成一个或多个。我们需要做的就是结合使用。
当我们有一个通用模块时,模块需要在不同的情况下执行不同的执行。想象一下,这个概念是一个博客系统,我们的动态模块需要消费者使用一些配置。
这是一个示范,生成
由于我们使这些选项很难,因此我们不能轻易在不同的应用程序之间共享此模块。如果另一个应用程序要使用此模块,但需要使用不同的端口怎么办?
目前,我们可以使用Nest的动态模块函数。我们可以让消费者模块使用API来控制这一点
Nodejs不遵循请求/响应的多毛线模型。该模型的每个请求均由单独的线程处理。
因此,使用示例对于我们的应用程序是完全安全的,但是在某些极端情况下,您可能需要提供提供者为某些主动行为提供基于请求的生命周期。
角色的作用使我们能够获得所需提供者的生命周期行为。默认情况下,Nestjs中的每个提供商都是一种情况。
对于大多数用例,建议使用单个套范围,这是最佳实践。
提供者可以使用的其他两个生命周期:
提供商将不会在消费者之间分享,每个注入暂时提供商的消费者都会收到提供商的新特殊示例
请注意,它应该使用两次,与之相同,因此在此也进行了实例化。
如果我们删除它,它将仅实例化一次,并且中国共享此实例,这将节省绩效。
您还可以将其添加到它:
它将为每个请求提供一个新的提供商实例。当然,请求完成后,还将收集实例
一开始,没有进行实例化,稍后进行了三个请求:
这意味着为每个请求创建服务。
这是一种情况,为什么它创建了3次,我们没有修改控制器装饰中的任何内容?
实际上,在巢中,这些范围将在链条中向上冒泡,这意味着,如果它取决于范围,它也将隐藏在范围内
我们添加日志:
然后问三次:
这对于您的访问请求特定信息非常有用,例如标题,cookie,ip等。
显示使用:
原始:https://juejin.cn/post/7097941612524732429