静的な並行辞書にアクセスするために使用される静的クラスがあります。
public static class LinkProvider
{
private static ConcurrentDictionary<String, APNLink.Link> deviceLinks;
static LinkProvider()
{
int numProcs = Environment.ProcessorCount;
int concurrencyLevel = numProcs * 2;
deviceLinks = new ConcurrentDictionary<string, APNLink.Link>(concurrencyLevel, 64);
}
public APNLink.Link getDeviceLink(string deviceId, string userId)
{
var result = deviceLinks.First(x => x.Key == deviceId).Value;
if (result == null)
{
var link = new APNLink.Link(username, accountCode, new APNLink.DeviceType());
deviceLinks.TryAdd(deviceId, link);
return link;
}
else
{
return result;
}
}
public bool RemoveLink(string deviceId)
{
//not implmented
return false;
}
}
asp.net のコントローラーでこのクラスを使用するにはどうすればよいですか
つまり行きたい:
LinkProvider provider;
APNLink.Link tmpLink = provider.getDeviceLink(id, User.Identity.Name);
//use my link
バックグラウンド。ディクショナリは、asp.net Web API プログラムの状態/要求間のリンク オブジェクトを保存するために使用されます。そのため、サービスがリンクを使用する必要がある場合、サービスはリンク プロバイダーにそのリンクを検索するように要求し、リンクがない場合は作成する必要があります。したがって、すべての http リクエストで同じインスタンスに辞書オブジェクトが必要です。