C# asp.net中的类库和静态变量

C# asp.net中的类库和静态变量,c#,asp.net,static-variables,C#,Asp.net,Static Variables,我有类库,它应该封装orm逻辑。为了避免一些db调用,它应该包含某种缓存或静态变量(我想避免它们)。它用于asp.net和wcf应用程序中。因为它是类库,所以我不想访问缓存或其他与asp.net相关的内容。我还希望避免使用静态变量,因为它们的应用范围性质 我应该如何实现这一点?你如何做到这一点 编辑: 为了简化:想象类库封装DAL。它与数据库通信。里面有一些代价高昂的查询。其中一些应该每个用户提取一次并存储在某处,而其中一些可以每个应用程序使用(也可以存储以避免将来调用DB)。问题是,通常我会使

我有类库,它应该封装orm逻辑。为了避免一些db调用,它应该包含某种缓存或静态变量(我想避免它们)。它用于asp.net和wcf应用程序中。因为它是类库,所以我不想访问缓存或其他与asp.net相关的内容。我还希望避免使用静态变量,因为它们的应用范围性质

我应该如何实现这一点?你如何做到这一点

编辑:


为了简化:想象类库封装DAL。它与数据库通信。里面有一些代价高昂的查询。其中一些应该每个用户提取一次并存储在某处,而其中一些可以每个应用程序使用(也可以存储以避免将来调用DB)。问题是,通常我会使用缓存,但因为它是DAL类库,所以我希望在其中包含此功能(而不是在asp.net中)。希望现在更清楚;)

您应该使用缓存:

  • 微软Appr Fabrik(前)
  • glyntucker.Cache
  • 共享缓存
使用模式、接口等:

类库应该是松散耦合的。(易于交换,无交叉引用)

示例(我是如何简化的):


@Andreas Rehm,Velocity的真名现在是AppFabric Cache。我最近一直在做一些研究,它看起来很有希望。在这里下载,是的-现在是AppFabric-您可以在这里找到更多信息:抱歉,但我询问了可以在类库内部使用的静态的替代方法。我不想用Asp.net的好东西。安德烈亚斯,我有。你为什么老是重复?你能给我一个具体的例子,说明从模式中可以使用什么来帮助我解决这个问题吗?这取决于-但我会使用工厂模式。伙计,我不明白你想说什么。你可以尝试使用一些psedoo代码或显示示例场景的工作流吗。我只是不明白你在问什么:(
namespace MyDbContext
{
    var cache;
    var db;

    public MyDbContext()
    {
        // Cache init
        cache = ....;

        // DB init (can be factory or singleton)
        db = DataBase.Instance();
    }

    public class Car
    {
        // Db tuple id
        public CarId { get; set; }

        public Car(int id)
        {
             CarId = id;
        }

        public Car GetFromDb()
        {
            // your db code will be here
            Car myCar = ....;

            // cache your object
            cache.Put("Car" + CarId.ToString(), myCar);
            return myCar;
        }

        public Car Get()
        {
            // try to get it from cache or load from db
            Car mycar = cache.Get("Car" + CarId.ToString()) as Car ?? GetFromDb();
        }

        public ClearCache()
        {
            cache.Put("Car" + CarId.ToString(), null);
            // maybe cache.Remove("Car" + CarId.ToString())
        }
    }
}