gpt4 book ai didi

c# - 如何在运行时(初始化后)注入(inject)对象?

转载 作者:行者123 更新时间:2023-11-30 12:16:21 25 4
gpt4 key购买 nike

我在我当前正在进行的两个项目中使用了依赖注入(inject)技术。

我使用 Unity 作为我的 IoC 框架。

我正在使用一个名为 ComponentBuilder 的类,它负责创建应用程序对象及其事件订阅,作为应用程序初始化的一部分。

应用程序运行后,所有对象都准备就绪,数据从一个对象传递到另一个对象。

我遇到的问题是:

一些对象是在初始化后动态创建的,这些对象需要其他已经存在的对象。

由于 ComponentBuilder 已经完成了它的部分,我需要找到一种将所需对象传递给这些“动态”对象的方法。这些动态对象实际上是在运行时创建的对象层次结构,层次结构中最深的对象需要层次结构顶部的组件(对象)。

我想到了两种可能的解决方案(我都不喜欢它们):

  1. 将所有对象的容器从 ComponentBuilder 传递给动态对象,以便它们可以使用和订阅所需的对象。此选项的主要缺点是公开所有对象,这可以隐藏对象之间的依赖关系。我看到有些人将对象容器传递给所有对象,就好像它是记录器或显示一样,我认为这是错误的,并且隐藏了我们想要公开给其他对象的依赖项。

  2. 将所需的对象传递给在初始时间创建的第一个对象,以便稍后它将对象向下传递到对象层次结构中的动态对象。此选项的主要缺点是层次结构中的某些对象不需要这些对象。

你能想到更好的解决方案吗?

最佳答案

似乎你需要一个标准的工厂/抽象工厂模式,你在构造函数中传递编译时依赖,在创建方法中传递运行时依赖。

class Factory
{
ISomeService service;

public Factory(ISomeService service)
{
this.service = service;
}


public SomeObject CreateItem(object runtimeDependency)
{
return new SomeObject(service, runtimeDependency);
}
}

关于c# - 如何在运行时(初始化后)注入(inject)对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550372/

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