interface IDbContextFactory { DbContext GetDbContext(); } /// <summary> /// DbContext实例化必须要保持唯一性 /// </summary> public class DbContextFactory :IDbContextFactory { private readonly DbContext Db; public DbContextFactory() { Db = new Db(); } public DbContext GetDbContext() { return Db; } }
个人感觉好像无法得到唯一的DbContext对象。
是单个DbContextFactory实例里唯一还是全局唯一?
上面的是单个DbContextFactory实例里唯一的,对于同一个DbContextFactory,每次调用GetDbContext都会得到同一个DbContext实例
如果需要全局唯一,可以把上面的定义与构造函数都改成静态的即可
感谢。考虑的时候是站在全局唯一去考虑的 所以一直没看明白如何全局唯一。几位朋友一说 就明白了。非常感谢。
全部正解。不能说是错误的,应该看具体场合。
在DbContextFactory的一个对象中,是唯一的,这种情况下你还需要对DbContextFactory做单例
总的来说,这种做法不好
应该是 保证 同一个IDbContextFactory实例创建出同一个 DbContext实例。
看到DbContext,觉得IDbContextFactory的生命周期应该不是单例,可以是单线程、单请求什么的,具体看看配置或者代码。
c#里面的readonly等同于c++的const 等同于 java里面的 final
上面这段代码完全无法保证 单一实例 readonly 只能保证 readonly的值 不改变 但是并不能保证它所指向的对象的值不改