首页 新闻 搜索 专区 学院

EF AutoFac 相关问题

0
[已解决问题] 解决于 2018-03-19 10:34

每次要做数据库操作时 都有这样类似的代码 如:
using(var db = new MyDbContext())
{
//todo
}

如果用autofac,在global.asax中 写以下代码:
var builder = new ContainerBuilder();
builder.RegisterType<MyDbContext>().InstancePerRequest();

是不是就可以不用写using语句了,直接一个全局MyDbContext,可行吗?

KaneChan的主页 KaneChan | 菜鸟二级 | 园豆:202
提问于:2018-03-16 11:39
< >
分享
最佳答案
0
 private readonly IRepository<UserEntity> _repository;
        public UserService(IRepository<UserEntity> repository)
        {
            _repository = repository;
        }
        public void Add(UserEntity user)
        {
         
            _repository.Add(user);
        }

 

是的,和你想的一样,不需要Using,代码里也没有New,如上的代码(构造器注入)

 

 

奖励园豆:5
happydaily | 菜鸟二级 |园豆:425 | 2018-03-19 09:13
其他回答(4)
0

你不能理解书上的知识的时候,就试试呗,问别人别人瞎说咋办?

纸上得来终觉浅 绝知此事要躬行。

爱编程的大叔 | 园豆:30753 (高人七级) | 2018-03-16 11:46
0

那句话的意思是:在请求开始前实例化一次MyDbContext 每一次请求中.你从容器里取出的都是本次请求开始时实例化的.

能理解吗?请求结束后他会自己释放.

吴瑞祥 | 园豆:28979 (高人七级) | 2018-03-16 11:57

那就可以省去using语句了 是不是这个道理?

支持(0) 反对(0) KaneChan | 园豆:202 (菜鸟二级) | 2018-03-16 12:02

@KaneChan: 这个是误区

你从容器中获取对象了.你对象的生命周期就是由容器控制的.你不应该再去控制从容器中取出的对象

支持(0) 反对(0) 吴瑞祥 | 园豆:28979 (高人七级) | 2018-03-16 16:00
0

你还得在要使用上下文的类里面定义个db 的变量,用于引用autofac为你创建的上下文对象,还得通过构造函数或者属性来让autofac为你把它创建的上下文对象注入到你定义的db变量中。

西漠以西 | 园豆:1675 (小虾三级) | 2018-03-16 14:36
0

你这人除了到处引战还会干啥?

邪王真眼是最强的 | 园豆:202 (菜鸟二级) | 2020-12-27 19:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册