gpt4 book ai didi

dependency-injection - 控制域对象构造问题的反转

转载 作者:行者123 更新时间:2023-12-04 08:21:59 25 4
gpt4 key购买 nike

据我了解,IoC 容器有助于创建应用程序级对象,如服务和工厂。但是域级对象应该手动创建。
Spring 的手册告诉我们:“通常不会在容器中配置细粒度的域对象,因为创建/加载域对象通常是 DAO 和业务逻辑的责任。”

好。但是,如果我的域“细粒度”对象依赖于某个应用程序级对象怎么办。
例如,我有一个 UserViewer(User user, UserConstants constants) 类。
有用户是无法注入(inject)的域对象,但 UserViewer 还需要 UserConstants ,它是由 IoC 容器注入(inject)的高级对象。

我想从 IoC 容器中注入(inject) UserConstants,但在这里我还需要一个 transient 运行时参数 User。

设计有什么问题?

提前致谢!

更新

看来我的问题不够精确。我真正需要的是一个如何做到这一点的例子:

创建类 UserViewer(User user, UserService service) 的实例,其中 user 作为参数传递,服务从 IoC 注入(inject)。

如果我注入(inject) UserViewer 查看器,那么如何将用户传递给它?

如果我手动创建 UserViewer 查看器,那么如何将服务传递给它?

最佳答案

这个设计没有错。您使用 Factories为此,它们在领域中有一条腿,在基础设施中有一条腿。

您可以手动编写它们,也可以让容器为您执行这些操作,例如 TypedFactoryFacility在温莎。

此外,当您的域对象来自持久层时,您可以将容器插入那里以注入(inject)他们需要的服务(NHibernate 可以做到这一点)。

关于dependency-injection - 控制域对象构造问题的反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1858774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com