gpt4 book ai didi

dependency-injection - 创建具有依赖关系的对象 - 依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 08:20:14 24 4
gpt4 key购买 nike

假设我们有课:

public class WithDependencies
{
public WithDependencies(IAmDependencyOne first, IAmDependencyTwo second)
// ...
}

现在的问题。如何在应用程序中创建 WithDependencies 类的对象?
我知道有很多方法。
new WithDependencies(new DependencyOne(), new DependencyTwo());
new WithDependencies(IoC.Resolve(IDependencyOne), IoC.Resolve(IDependencyTwo());
// register IDependencyOne, IDependencyTwo implementations at app start
IoC.Resolve(WithDependencies);
// register IDependencyOne, IDependencyTwo implementations at app start
// isolate ourselves from concrete IoC Container
MyCustomWithDependenciesFactory.Create();

等等...

你认为这样做的方法是什么?

编辑:

因为我没有得到答案或者我不理解它们,所以我会尝试再次询问。假设在某些事件(按钮、计时器等)上,我需要新对象 WithDependencies()。我如何创建它?假设 IoC 容器已配置。

最佳答案

这取决于上下文,因此不可能提供单一答案。从概念上讲,您将在 Composition Root 中执行类似的操作:

var wd = new WithDependencies(new DependencyOne(), new DependencyTwo());

然而,即使在没有 DI 容器的情况下,上述代码也并不总是明确的正确答案。在某些情况下,您可能希望在多个消费者之间共享相同的依赖项,如下所示:
var dep1 = new DependencyOne();
var wd = new WithDependencies(dep1, new DependencyTwo());
var another = AnotherWithDependencies(dep1, new DependencyThree());

在其他情况下,您可能不想共享依赖项,在这种情况下,第一个选项更正确。

这只是与 相关的 DI 的整个维度的一小部分。终身管理 .许多 DI Containers 可以为您解决这个问题,这是选择 DI Container 而不是Poor Man's DI 的一个很好的论据。

一旦你开始使用 DI Container,你应该遵循 Register Resolve Release pattern解析类型时,让 自动接线注意实际组成:
var wd = container.Resolve<WithDependencies>();

上面的示例假设容器已经正确配置。

关于dependency-injection - 创建具有依赖关系的对象 - 依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172500/

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