首页 新闻 会员 周边 捐助

依赖式注入 会主动 Dispose吗

0
悬赏园豆:10 [已解决问题] 解决于 2014-04-20 03:22

初学 依赖式注  使用的是unity.mvc5  不知道 会不会主动 Dispose 释放数据库连接

SpeakHero的主页 SpeakHero | 初学一级 | 园豆:31
提问于:2014-04-11 14:48
< >
分享
最佳答案
0

依赖注入创建的对象 都是可以设置声明周期的,默认是 即时,用完释放,下次用又是新的。

Qlin | 老鸟四级 |园豆:2403 | 2014-04-11 15:59

怎么设置周期  是把上下文对象放在那个位置

SpeakHero | 园豆:31 (初学一级) | 2014-04-11 16:00

@SpeakHero: 依赖注入 用ioc容器吧,用ioc容器设置。

像你的问题,Ef的实例不用管dispose,你知道啥时候dispose 好点呢,万一有延迟查询就报错。

如果 ef的实例成为了垃圾,GC回收时会触发析构函数,析构函数会触发dispose方法的。

Qlin | 园豆:2403 (老鸟四级) | 2014-04-11 17:59
其他回答(1)
0

你的数据库连接从unity容器里获取的?

收获园豆:10
吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-11 15:08

不是

支持(0) 反对(0) SpeakHero | 园豆:31 (初学一级) | 2014-04-11 15:10

我写在basebll里面 

支持(0) 反对(0) SpeakHero | 园豆:31 (初学一级) | 2014-04-11 15:11

@SpeakHero: 数据库连接是在数据访问层创建和释放的.业务层对象不会去管理数据库连接,也就不会有释放的问题.因为释放都是数据访问层做的

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-11 15:17

@吴瑞祥: 我在bll 里统一 数据连接  

 

public DbContainer db = new DbContainer();

[Dependency]
public T Rep { get; set; }

public void Dispose()
{
if (db != null)
{
db.Dispose();
}
}

不知道 unity会不会主动调取 Dispose 方法

支持(0) 反对(0) SpeakHero | 园豆:31 (初学一级) | 2014-04-11 15:19

@SpeakHero: 你这个DbContainer是什么?是一个数据库连接吗?看你想unity容器注册逻辑层对象的时候指定的生命周期了

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-11 15:25

@吴瑞祥:  DbContainer是ef的context对象

支持(0) 反对(0) SpeakHero | 园豆:31 (初学一级) | 2014-04-11 15:26

@SpeakHero: 那数据库连接一定会被释放,因为是由EF管理的,但是EF上下文不会释放,除非逻辑层对象被释放

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-11 15:39

@吴瑞祥: 看官方的文档说要手动 dispose 才能关闭数据库连接

支持(0) 反对(0) SpeakHero | 园豆:31 (初学一级) | 2014-04-11 15:41

@SpeakHero: 不会的,你new一个ef上下文并不会打开一个数据库连接.ef只在你你savachange的时候连接到数据库,并且肯定会自动关闭的.之所以要调用dispose是为了释放ef上下文而不是数据库连接.

ef上下文因为有二次缓存,所以不释放的话会越变越大,学习ef第一点就是学会管理上下文

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-11 15:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册