【发布时间】:2011-10-17 18:54:44
【问题描述】:
我有这个:
public class DbContext : System.Data.Entity.DbContext, IDbContext
{
}
我的 Ninject 配置:
public override void Load()
{
Bind<IDbContext>().To<DbContext>().InRequestScope().WithConstructorArgument("connectionString", ConfigurationManager.AppSettings["DefaultConnectionString"]);
}
那么,我如何在另一个类中获得 DbContext 的相同实例,例如:
public class ExampleClass()
{
...
public ExampleClass(DbContext myDbContextDependency)
{
...
}
}
更新 1:
IDbContext 是我的UnitOfWork 模式,它存在于我的域层:
public interface IDbContext
{
void SaveChanges();
}
而且我需要 DbContext 在我的 BaseRepository 中使用:
public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : Entity
{
...
//I'm using DbContext here:
protected BaseRepository()
{
this.DbSet = DbContext.Set(typeof(TEntity));
}
//and here:
public virtual void Edit(TEntity entity)
{
this.DbContext.Entry(entity).State = EntityState.Modified;
}
}
【问题讨论】:
-
我很好奇。如果你在整个请求中重复使用相同的上下文,你在哪里调用
SaveChanges? -
您可能应该将您创建的
DbContext类更改为不同的名称,以避免命名冲突。我看到您正在使用 EF 的DbContext的完整命名空间名称,但为了将来的维护者,请使用不同的类名。 -
@Omar 谢谢奥马尔,我会考虑的。
标签: dependency-injection ninject