gpt4 book ai didi

entity-framework - 如何通过 Ninject 获取 UnitOfWork 中的 DbContext 实例?

转载 作者:行者123 更新时间:2023-12-02 03:08:24 26 4
gpt4 key购买 nike

我将 UnitOfWork 模式与 Entity Framework 结合使用,使用以下代码公开 DbContext。所以我的问题是,是否可以使用 Ninject 获取 Context 实例?

IUnitOfWork

public interface IUnitOfWork<C> :  IDisposable
{
int Commit();
C GetContext { get; set; }
}

工作单元

public class UnitOfWork<C> : IUnitOfWork<C> where C : DbContext
{
private bool _disposed;
private readonly C _dbContext = null;

public UnitOfWork()
{
GetContext = _dbContext ?? Activator.CreateInstance<C>();
}

public int Commit()
{
return GetContext.SaveChanges();
}


public C GetContext
{
get;
set;
}
[...]

现在位于NinjectWebCommon

private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>().InRequestScope();
kernel.Bind<IEmployeeRepository>().To<EmployeeRepository>();
}

不使用_dbContext ?? Activator.CreateInstance<C>(); ,是否可以通过Ninject获取DbContext实例?

最佳答案

是的,这是可能的。检查下面的解决方案

Ninject DI 配置

kernel.Bind<MyDbContext>().ToSelf().InRequestScope();
kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>();
kernel.Bind<IEmployeeRepository>().To<EmployeeRepository>();

并且在UnitOfWork

   public class UnitOfWork<C> : IUnitOfWork<C> where C : DbContext
{
private readonly C _dbcontext;

public UnitOfWork(C dbcontext)
{
_dbcontext = dbcontext;
}

public int Commit()
{
return _dbcontext.SaveChanges();
}

public C GetContext
{
get
{
return _dbcontext;
}

}
[...]

关于entity-framework - 如何通过 Ninject 获取 UnitOfWork 中的 DbContext 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14322971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com