gpt4 book ai didi

c# - 工厂对象由于依赖于自身而导致 stackoverflowException

转载 作者:行者123 更新时间:2023-12-02 14:06:19 27 4
gpt4 key购买 nike

我有一个 C# 工厂对象,它使用对象列表作为源,通过工厂方法创建对象。

对象列表的创建方式如下:

public WidgetFactory()
{
widgetLibrary = new List<WidgetModel>();

//Add all widgets
widgetLibrary.Add(new ClientsWidget());
widgetLibrary.Add(new InstallationsWidget());
etc.

我的应用程序的各个部分以不同的方式访问此列表以获取它所需的对象类型。

但我现在有一个要求,列表中的对象之一(即小部件)需要使用小部件工厂本身。显然这会导致循环引用。

我如何改变我的设计来满足这种需求?

最佳答案

But I now have a requirement that one of the objects in the list(i.e. a widget) needs to make use of the widget factory itself. Clearly this causes a circular reference.

How can I alter my design to accomodate this need?

通常,对象不应该依赖于创建它们进行构造的工厂,因为它正是导致这个问题的原因。如果您可以推送对工厂的引用,但在需要时才使用它,则可能会解决问题。

如果您确实需要这样做,那么最好的方法可能是在工厂内延迟实例化对象。而不是你的WidgetFactory包含 List<WidgetModel>在内部,您可以使用 List<Lazy<WidgetModel>> 。这将允许单个“小部件”仅根据需要进行评估,这意味着,当相关小部件尝试引用工厂时,它将被完全加载。

关于c# - 工厂对象由于依赖于自身而导致 stackoverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470687/

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