在Asp.Net MVC中,默认模板附带Startup.Auth.cs中的Startup类
public partial class Startup
{
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
根据此模板中的评论,每个请求都会创建一个 ApplicationDbContext 的实例。
在我的应用程序中,我正在使用存储库模式并将 ApplicationDbContext 注入存储库。就我而言,我正在使用Ninject,如果需要,它可以在多个存储库之间共享相同的上下文。
有没有办法在Startup.Auth中使用相同的 ApplicationDbContext ?不确定更改默认模板是否是个好主意,同时我们在1个请求中创建相同上下文的2个实例...
在我的Ninject代码中,我将 ApplicationDbContext 绑定到自身,如下所示:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();
不确定将上下文绑定到自身而不是创建接口这是一种不好的做法吗? (虽然工作正常)。
答案 0 :(得分:1)
不确定将上下文绑定到自身是否是一种不好的做法 而不是创建一个接口?
将DbContext
注册为自我和每个请求的生命周期是很正常的。
我个人喜欢实现IDbContext
接口,因此在我对单元测试存储库时进行模拟会更加清晰。因此,my repositories依赖于抽象而不是具体实现。
public class ApplicationDbContext : DbContext, IDbContext
{
}
public interface IDbContext
{
DbSet<MyEntity> MyEntities { get; set; }
...
}