每次要做数据库操作时 都有这样类似的代码 如:
using(var db = new MyDbContext())
{
//todo
}
如果用autofac,在global.asax中 写以下代码:
var builder = new ContainerBuilder();
builder.RegisterType<MyDbContext>().InstancePerRequest();
是不是就可以不用写using语句了,直接一个全局MyDbContext,可行吗?
private readonly IRepository<UserEntity> _repository; public UserService(IRepository<UserEntity> repository) { _repository = repository; } public void Add(UserEntity user) { _repository.Add(user); }
是的,和你想的一样,不需要Using,代码里也没有New,如上的代码(构造器注入)
你不能理解书上的知识的时候,就试试呗,问别人别人瞎说咋办?
纸上得来终觉浅 绝知此事要躬行。
那句话的意思是:在请求开始前实例化一次MyDbContext 每一次请求中.你从容器里取出的都是本次请求开始时实例化的.
能理解吗?请求结束后他会自己释放.
那就可以省去using语句了 是不是这个道理?
@KaneChan: 这个是误区
你从容器中获取对象了.你对象的生命周期就是由容器控制的.你不应该再去控制从容器中取出的对象
你还得在要使用上下文的类里面定义个db 的变量,用于引用autofac为你创建的上下文对象,还得通过构造函数或者属性来让autofac为你把它创建的上下文对象注入到你定义的db变量中。
你这人除了到处引战还会干啥?