Dependency injection 有状态对象的IoC依赖项注入(非全局)

Dependency injection 有状态对象的IoC依赖项注入(非全局),dependency-injection,ioc-container,Dependency Injection,Ioc Container,我不熟悉IoC和DI业务——我觉得如果你传递的是全局范围的对象,我就理解了这个概念,但是当你需要传递一个特定逻辑状态的对象时,我不知道它是如何工作的。例如,如果我想将person对象注入到write file命令对象中,我如何能够动态地选择正确的person对象?从我所看到的,我可以默认构造对象,但我的区别是,您不会使用默认的person对象,它需要是动态的。我假设IoC容器可能只是在传递对象时为您维护对象的状态,但是假设您只处理一个人对象,因为没有线程安全,对吗?我知道我遗漏了一些东西(可能是

我不熟悉IoC和DI业务——我觉得如果你传递的是全局范围的对象,我就理解了这个概念,但是当你需要传递一个特定逻辑状态的对象时,我不知道它是如何工作的。例如,如果我想将person对象注入到write file命令对象中,我如何能够动态地选择正确的person对象?从我所看到的,我可以默认构造对象,但我的区别是,您不会使用默认的person对象,它需要是动态的。我假设IoC容器可能只是在传递对象时为您维护对象的状态,但是假设您只处理一个人对象,因为没有线程安全,对吗?我知道我遗漏了一些东西(可能是factoryclass之类的东西),但我需要更多关于如何工作的信息。

好的,您可以随时将注入到消费者中,并使用它创建本地范围的对象

这有时是必要的。参见以下示例:


然而,一般来说,我们倾向于不对实体使用DI,而主要是对服务使用DI。相反,实体通常是通过某种存储库创建的。

当您构建一个服务对象(例如,
WriteFileService
)时,您会向它内部注入完成其工作所需的东西。也许它需要一个文件系统对象或其他东西


示例中的
Person
对象应作为方法调用的参数传递给服务对象。e、 g.
writeFileService.write(person)

那么一般来说,实体根本就不是DI基础设施的一部分?我把这件事复杂化了吗?没错:实体和价值对象倾向于分开生活。从某种意义上说,它们仍然以某种方式由DI基础设施管理(理想情况下,一切都是这样),但以非常间接的方式。它们通常通过存储库或类似的方式读写到永久存储中,这些服务是DI基础设施的一部分。好的,我想DI负责人是说应该从IoC容器(通过配置)提供person Entity对象……虽然可以通过FactoryClass从数据库(客户机/服务器体系结构)动态创建实体,但这不是必需的,可以单独管理。我收集的是A)个人对象实体不需要是DI基础设施/配置的一部分,只有服务通常以这种方式注入;B)如果个人对象本身在构建时需要服务对象,我可以将其添加到DI基础设施/配置中,我将使用FactoryClass从数据库中创建person实体的动态实例。请这样想:有一组已知的服务,这意味着您可以配置DI容器来包含它们。但是,当涉及到实体和值对象时,它们的数量未知。因此,它们不是基础设施的一部分,因为它们是应用程序操作的数据。。。因此,在本例中,我可以看到在没有DI基础设施的情况下如何使用实体。尽管如此,WriteFileService在创建时可能使用DI基础设施(基于对写入特定输出的注入类的需求,例如WriterA-写入数据库、WriterB-对控制台的权限等)。