Repository
类具有单例行为,_db
实现一次性模式。除了_db
对象在第一次调用之后被释放,并且由于单例行为,任何其他_db
调用都将崩溃。
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class Repository : IRepository
{
private readonly DataBase _db;
public Repository(DataBase db)
{
_db = db;
}
public int GetCount()
{
using(_db)
{
return _db.Menus.Count();
}
}
public Item GetItem(int id)
{
using(_db)
{
return _db.Menus.FirstOrDefault(x=>x.Id == id);
}
}
}
我的问题是,有没有办法设计这个类,以便在不删除单例行为的情况下正常工作? Repository
课程将提供大量请求。
答案 0 :(得分:2)
执行此操作时:
using(_db)
您要保证在您的对象上调用Dispose()。
我建议将其更改为使用带有_db的私有静态成员的静态类。
public static class Repository {
private static DataBase _db;
// static constructor
static Repository () {
_db = new Database();
}
public static int GetCount() {
return _db.Menus.Count();
}
public Item GetItem(int id) {
return _db.Menus.FirstOrDefault(x=>x.Id == id);
}
}
答案 1 :(得分:2)
当您向DataBase
提供Repository
实例时,这意味着创建和处置不在Repository
类的范围内。因此,Repository
不应该处置该实例。你应该删除using
语句,你会没事的。写下Repository
如下:
public class Repository : IRepository
{
private readonly DataBase _db;
public Repository(DataBase db)
{
_db = db;
}
public int GetCount()
{
return _db.Menus.Count();
}
public Item GetItem(int id)
{
return _db.Menus.FirstOrDefault(x=>x.Id == id);
}
}