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

时间:2010-07-29 17:40:00

标签: c# asp.net static-variables

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

我该如何实现?你是怎么做到的?

编辑:

简化:想象一下封装DAL的类库。它与数据库对话。里面有一些昂贵的查询。其中一些应该每个用户获取一次并存储在某个地方,其中一些可以按应用程序使用(也存储以避免将来调用DB)。通常我会使用Cache,但由于它是DAL类库,我想在其中包含此功能(而不是在asp.net中)。希望现在更清楚了;)

1 个答案:

答案 0 :(得分:2)

你应该使用缓存:

使用模式,界面等:

您的类库应该松散耦合。 (易于交换,没有交叉参考)

示例(我如何简化):

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())
        }
    }
}