带有Ninject的EF存储库中的InvalidOperationException

时间:2017-10-05 20:06:01

标签: c# asp.net-mvc entity-framework repository ninject

我为ASP.NET MVC项目进行自定义身份验证,并使用EF 6.1.3和Ninject.MVC 3.2.1。我使用存储库和工作单元模式。 我希望在我的视图模型中使用自定义ValidationAttribute在注册时验证唯一用户名。 有时我的存储库抛出private static void RegisterServices(IKernel kernel) { kernel.Bind<DbContext>().To<MyPortfolioDbContext>().InRequestScope(); kernel.Bind(typeof(IDbRepository<>)).To(typeof(EfRepository<>)); kernel.Bind<Func<IUnitOfWork>>().ToMethod(ctx => () => ctx.Kernel.Get<EfUnitOfWork>()); kernel.Bind<IUnitOfWork>().To<EfUnitOfWork>(); kernel.Bind<IAuthenticationManager>().To<AuthenticationManager>(); kernel.Bind(k => k .From("MyPortfolio.Services.Authentication", "MyPortfolio.Services.Data") .SelectAllClasses() .BindDefaultInterface()); } 并带有描述:

  

由于dbcontext已被丢弃,因此无法完成操作。

这是我的Ninject配置:

public class RegistrationValidator : ValidationAttribute
{
    [Inject]
    public IDbRepository<User> Users { get; set; }

    public override bool IsValid(object value)
    {
        string username = (string)value;
        bool result = true;
        if (this.Users.FirstOrDefault(u => u.Username == username) != null)
        {
            result = false;
        }
        return result;
    }
}

这是我的ValidationAttribute:

public class EfRepository<T> : IDbRepository<T> where T : class, IAuditInfo, IDeletableEntity
{
    private IDbSet<T> dbSet;
    private DbContext context;

    public EfRepository(DbContext context)
    {
        if (context == null)
        {
            throw new ArgumentException("An instance of DbContext is required to use this repository.", nameof(context));
        }
        this.context = context;
        this.dbSet = this.context.Set<T>();
    }

    //another methods

    //the method that throw an exception
    public T FirstOrDefault(Expression<Func<T, bool>> filterExpression)
    {
        return this.dbSet.Where(x => !x.IsDeleted).FirstOrDefault(filterExpression);
    }

    //another methods
}

这是我的存储库:

    .section .bss
    .globl var1
    .size var1, 1
var1:
    .skip 1

    .align 16777216
    .globl var2
    .size var2, 1048576
    .globl var3
    .size var3, 1048576
    .globl var4
    .size var4, 1048576
var2:
var3:
var4:
    .skip 1048576

    .text

    .globl main
main:
    xor %eax, %eax
    ret

如果您需要我项目的其他代码,请告诉我。

我的假设是,在将存储库注入ValidationAttribute时,Ninject使用了旧的dbContext。你有什么看法。

0 个答案:

没有答案