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

时间:2012-03-24 02:08:48

标签: c# .net api

我正在开发一个类库/ 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 个答案:

答案 0 :(得分:0)

我认为#1是最常见的。我知道你说你不想使用配置文件,但是如果你看一下.NET如何使用app.config我认为你会看到类似于#1的方法。您没有看到app.config设置的实例传递给需要读取设置的每个方法/函数。我通常做VB.NET,其中有一个静态的My.Settings类,基本上可以实现与#1相同的功能。

我看到#2的最大缺点(也可能是它不常见的原因)是config类可以传递很多东西。如果只有少数方法实际上需要读取配置它可能没问题,但如果许多方法需要读取配置它开始变得头疼。在我看来,它也使方法签名混乱。想象一下库中深处需要读取配置的类;你可能必须通过几个更高级别的类传递配置,只是为了将它传递给需要它的类。

我建议至少考虑使用app.config或web.config作为其中一个已经具有内置功能的这类东西。

修改

我正在等待Brannon回答一个例子,但是因为他没有我会继续并且插入.IOC容器是帮助依赖注入的好工具,但我不会梦想引入一个对于设置类。如果您已经使用过,那可能是另一回事。让我们假设您已经在使用IOC容器,并希望将它用于您的配置类。这意味着您仍然拥有如下所示的方法签名:

Function Add (FirstNumber, SecondNumber, Config)

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

说实话,其中一些归结为个人偏好。请记住,当您使用app.config时,VS / .NET会使用#1开箱即用。我知道静态类在很多情况下经常是不受欢迎的,但我认为设置/配置类是规则的例外。