gpt4 book ai didi

c# - 在类库中设置配置设置的最标准方法

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

我正在开发一个类库/API,我需要存储一些将由某些类使用的全局参数。我考虑了两种主要的方法(忽略在这种情况下我不希望使用的配置文件):

1) 在静态类中指定参数,像这样:

// Stores and validates settings
ApiConfiguration.SetConfiguration("some values or class here");

var methods1 = new MyFirstApiMethods();
methods1.DoStuff(); // Internally uses static ApiConfiguration.

var methods2 = new MySecondApiMethods();
methods2.DoOtherStuff(); // Internally uses static ApiConfiguration.

2) 创建配置类的实例并将其传递给类,如下所示:

// Create an instance of the configuration class
var config = new ApiConfiguration();
config.ServerName = "some-server-name";

var methods1 = new MyFirstApiMethods(config);
methods1.DoStuff(); // Uses the supplied ApiConfiguration instance.

var methods2 = new MySecondApiMethods(config);
methods2.DoOtherStuff(); // Uses the supplied ApiConfiguration instance.

第一个选项对我来说感觉更自然,但我能想到一些可能的缺点(例如,如果配置在两个具有不同值的地方设置)。

我想知道每种实现的可能缺点,以及在这种性质的已知项目中最常见的方法是什么。

最佳答案

我会说#1 是最常见的。我知道您说过您不想使用配置文件,但如果您查看 .NET 如何使用 app.config,我想您会发现采用了与 #1 类似的方法。您不会看到 app.config 设置的实例被传递到需要读取设置的每个方法/函数。我通常使用 VB.NET,它有一个静态的 My.Settings 类,它基本上实现了与您的 #1 相同的功能。

我看到 #2 的最大缺点(可能也是它不太常见的原因)是配置类可以被大量传递。如果实际上只有少数方法需要读取配置,这可能没问题,但如果许多方法需要读取配置,它就会开始变得令人头疼。在我看来,它也会使方法签名变得困惑。想象一下库深处的一个类需要读取配置;您可能必须通过几个更高级别的类来传递配置,才能将其传递给需要它的类。

我建议至少考虑使用 app.config 或 web.config,因为其中任何一个已经内置了此类功能。

编辑

我一直在等 Brannon 举个例子来回应,但既然他还没有,我就插话了。IOC 容器是帮助依赖注入(inject)的好工具,但我做梦都不想介绍一个对于设置类。如果您已经在使用一个,那可能是另一回事。假设您已经在使用 IOC 容器并希望将其用于您的配置类。这意味着您仍然拥有如下所示的方法签名:

Function Add (FirstNumber, SecondNumber, Config)

不可否认,这个例子有点牵强,但你明白了。 IOC 容器将解析您的 Config 依赖项(它将为您创建配置类),但您仍然将配置作为每个需要它的方法/构造函数的参数。

老实说,其中一些归结为个人喜好。请记住,当您使用 app.config 时,VS/.NET 使用开箱即用的#1。我知道静态类经常不受欢迎,在很多情况下也是如此,但我认为设置/配置类是异常(exception)。

关于c# - 在类库中设置配置设置的最标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848539/

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