gpt4 book ai didi

c# - main 之前的静态初始化

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

我有一个软件,其中有一个负责打开文件的中央抽象工厂方法。起初,工厂知道它可以打开的所有文件类型以及它创建的相应对象(每个文件类型都有不同的处理程序),但随着时间的推移它变得不切实际:首先,不希望摆弄工厂处理新文件类型时的类;其次,一些具体的文件处理程序存在于单独的 DLL 中,使它们无法从工厂访问! (文件处理程序有时需要工厂处理仅索引其他文件路径的文件,因此它们必须知道工厂;如果工厂知道它们,则依赖关系将是循环的)

我们想到的解决方案是让每个新的对象类型都向工厂“注册”自己,这样一旦创建了工厂方法,它就会测试注册的对象类型,看看哪个是最合适的,创建它。

最大的问题是:这些对象什么时候向工厂注册自己?理想情况下,它会在任何调用工厂之前发生一次。但是,由于在 C# 中您不能指望在访问类型之前调用静态 c'tor,所以我不知道如何做到这一点。我们当前的解决方案是执行一个 dll 范围的 Initialize 方法,该方法向工厂注册对象类型,但这显然是我不喜欢的 hack。

我们是否缺少某些设计模式?处理这个的不同方法?重要的是要注意,需要注册到工厂的文件处理程序位于必须引用工厂的单独 DLL 中。

最佳答案

您的应用程序设计似乎存在一些问题。有一些技术可以阻止像你这样的循环依赖。通常程序员为此使用控制反转。在这种情况下,您可以在处理程序的“工厂”类接口(interface)中使用而不是具体实现。接口(interface)应该在与工厂相同的 dll 中或在另一个“核心”dll 中定义,它们将从您的两个 dll 中引用。

关于c# - main 之前的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23921566/

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