-12

在我的应用程序中,我想做类似的事情:

SomeApiClient apiClient = new SomeApiClient();

List<User> apiClient.getUsers();

在我的 web.config 中,我将配置几个键/值对。

如何编写 SomeApiClient 的构造函数,使其从 web.config 加载值,但不是每次,仅在应用程序启动或第一次请求时加载一次?

4

1 回答 1

2

给你。

namespace dm2
{
    using System.Collections.Specialized;
    using System.Configuration;

    public class SomeApiClient
    {
        internal static NameValueCollection Config
        {
            get
            {
                if (config == null) config = ConfigurationManager.AppSettings;
                return config;
            }
        }

        internal static NameValueCollection config;
    }
}

基本上你只是在一个非静态类中使用一个静态属性......所以为了得到你的配置设置,

public void DoFunConfigStuff()
{
    for (var i = 0; i < Config.Count;i++ )
    {
        Console.WriteLine("[{0}]: {1}",Config.Keys[i] ,Config[i]);
    }
}

既然你提到了 web.config,我假设这是一个网络应用程序。所以我想指出,您应该期望您的应用程序池可以随时回收,此时这将导致静态 getter 重新评估并加载新设置。这个最好不要回复。

您可以做的一件事是将此信息序列化到某种介质,无论是磁盘还是数据库,然后使用某种 db 开关或强制重新加载的网页。

所以在那个getter中它会检查序列化的数据,如果它不存在,检查web.config,然后把数据保存在某个地方。下次它被回收时,它将拾取旧数据。我想真的取决于你的设置。

于 2013-01-14T03:37:00.097 回答