我正在使用Couchbase 1.8在缓存中存储一系列复杂实体。
非常简单的场景,所有在一个控制台应用程序中似乎都可以找到。但是,当我将相同的“想法”重构为不同的集合时,似乎没有任何效果。
控制台应用程序:
[Serializable]
public class Entity : EntityBase<Entity>
{
public string Title { get; set; }
public Entity() { }
}
public abstract class EntityBase<T> : IEntity<T> where T : new()
{
public string Name { get; set; }
public List<T> Get() { return null; }
}
public interface IEntity<T> where T : new()
{
Name { get; }
List<T> Get();
}
然后在Console应用程序中,我用以下方法测试:
// client = new CouchbaseClient();
List<Entity> e = new List<Entity> { new Entity { Title = "Entity1" } };
client.Store(StoreMode.Set, "EntityItem", e);
List<Entity> output = client.Get<List<Entity>>("EntityItem"); // return 1 item
但是,当我重构相同的代码时,似乎没有存储任何内容:
// assembly called Entity.Core
// 1. Entity
[Serializable]
[EntityAttribute(Description = "description")]
public class Entity : EntityBase<Entity>
{
public string Title { get; set; }
public Entity() { }
}
// 2. EntityBase
public abstract class EntityBase : IEntity<T> where T : new()
{
private Couchbase _client = new CouchbaseClient("vBucket", "vBucketPassword");
public string Name { get; set; }
public static T Instance { get { return Singleton<T>.Instance; } }
private IEnumerable<T> ToCache<T>() where T : new() { // gets items from my data source }
public List<T> Get()
{
List<T> entity = this._client.Get<List<T>>(this.Name);
// if not in cache, call ToCache<T>() to get the object, cache it and return
return entity;
}
}
// 3. IEntity is the same as above
// 4. Singleton<T> is a class that constructs a singleton pattern based on the T
当我在控制台应用程序中测试它时,名称会在缓存中分配,但该项始终为null,从缓存返回?
// client = new CouchbaseClient();
List<Entity> entity = Entity.Instance.Get(); // returns, for example 4 items as expected
client.Store(StoreMode.Set, "EntityItem", entity); // should store List<Entity>[4] in cache
List<Entity> output = client.Get<List<Entity>>("EntityItem"); // returns null
我假设是因为我试图在我的实体定义的抽象类中定义客户端和实体?这种推理可能吗?
更新 我修改了我的测试以将CouchbaseClient实例传递给.Get()方法。似乎是,在EntityBase类中使用了CouchbaseClient引用。通过这种方式,我不是百分之百卖出。
答案 0 :(得分:0)
在初始化时将存储桶用户名和密码作为配置值传递给客户端。一个空白的构造函数在我的场景中没有说出来。