0

我有一个静态类,用于访问静态并发字典:

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请求中的同一个实例。

4

1 回答 1

3

所以我需要字典对象到我所有的http请求中的同一个实例

然后使用一个static类,并创建每个方法static,所以你可以使用以下语法调用它:

APNLink.Link tmpLink = LinkProvider.getDeviceLink(id, User.Identity.Name);

话虽如此,您应该知道 ASP.Net 应用程序中的内存中静态变量并不总是可以安全使用,因为您的应用程序不是无状态的,如果应用程序池被回收,您的字典将被重新实例化.

于 2014-03-11T12:22:43.957 回答