首页 新闻 会员 周边 捐助

下面这段代码能创建出唯一的对象吗?不是很明白。

0
[待解决问题]
 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对象。

yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2014-05-19 23:57
< >
分享
所有回答(5)
0

是单个DbContextFactory实例里唯一还是全局唯一?

上面的是单个DbContextFactory实例里唯一的,对于同一个DbContextFactory,每次调用GetDbContext都会得到同一个DbContext实例

如果需要全局唯一,可以把上面的定义与构造函数都改成静态的即可

诶碧司 | 园豆:1912 (小虾三级) | 2014-05-20 07:23

感谢。考虑的时候是站在全局唯一去考虑的 所以一直没看明白如何全局唯一。几位朋友一说 就明白了。非常感谢。

支持(0) 反对(0) yzy | 园豆:317 (菜鸟二级) | 2014-05-20 09:56
0

全部正解。不能说是错误的,应该看具体场合。

lucika.zh | 园豆:54 (初学一级) | 2014-05-20 08:59
0

在DbContextFactory的一个对象中,是唯一的,这种情况下你还需要对DbContextFactory做单例

总的来说,这种做法不好

吴瑞祥 | 园豆:29449 (高人七级) | 2014-05-20 09:54
0

应该是 保证 同一个IDbContextFactory实例创建出同一个 DbContext实例。

看到DbContext,觉得IDbContextFactory的生命周期应该不是单例,可以是单线程、单请求什么的,具体看看配置或者代码。

Qlin | 园豆:2403 (老鸟四级) | 2014-05-20 12:26
0

c#里面的readonly等同于c++的const 等同于 java里面的 final 

 

上面这段代码完全无法保证 单一实例    readonly 只能保证 readonly的值 不改变 但是并不能保证它所指向的对象的值不改

ruoyu4game | 园豆:342 (菜鸟二级) | 2014-05-22 00:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册