在我的应用程序中,我想做类似的事情:
SomeApiClient apiClient = new SomeApiClient();
List<User> apiClient.getUsers();
在我的 web.config 中,我将配置几个键/值对。
如何编写 SomeApiClient 的构造函数,使其从 web.config 加载值,但不是每次,仅在应用程序启动或第一次请求时加载一次?
在我的应用程序中,我想做类似的事情:
SomeApiClient apiClient = new SomeApiClient();
List<User> apiClient.getUsers();
在我的 web.config 中,我将配置几个键/值对。
如何编写 SomeApiClient 的构造函数,使其从 web.config 加载值,但不是每次,仅在应用程序启动或第一次请求时加载一次?
给你。
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,然后把数据保存在某个地方。下次它被回收时,它将拾取旧数据。我想真的取决于你的设置。