我如何在Ninject的继承树中使用继承的DbContext的相同实例?

问题描述 投票:0回答:1

我的解决方案中有一个可爱的问题...

一个实体对象不能被的多个实例引用IEntityChangeTracker

这是由于UserManager实现以及(基本上,其余的代码似乎使用了DbContext的不同实例。

我所遇到的问题是UserManager在继承树中使用了DbContext的较低级别版本(大约有4个继承的DbContext级别-这是大量的遗留代码,因此更改它是'现在是我的选择)。

这里是UserManager ...

public class MyUserManager : UserManager<User, int>
{
    private readonly BaseDbContext db;

    public MyUserManager(BaseDbContext dbContext) 
        : base(new UserStore<User, Role, int, UserLogin, UserRole, UserClaim>(dbContext))
    {
        db = dbContext;
        var provider = new DpapiDataProtectionProvider("My");

        UserValidator = new UserValidator<User, int>(this) { AllowOnlyAlphanumericUserNames = false };
        UserTokenProvider = new DataProtectorTokenProvider<User, int>(provider.Create("MyTokenProvider"));
    }
}

[其他所有对象都使用一个称为MainDbContext的类,该类继承自AnotherDbContext,然后是BaseDbContextAnotherDbContext不在任何重要的地方使用,因此我的Ninject设置如下...

private static IKernel RegisterDatabase(this IKernel kernel)
{
    kernel.Bind<BaseDbContext>().To<MainDbContext>().InRequestScope();
    kernel.Bind<MainDbContext>().ToSelf().InRequestScope();
    return kernel;
}

((我在所有IoC设置中都使用了流利的方法,因此在主设置中会调用此方法。)>

我以为这可以实现我想要的一切(使用MainDbContext实例解析度),但事实并非如此-似乎我为UserManager获得了1个实例,为其他所有事物获得了1个实例。它可以很好地解析(我得到正确的TYPES),但是实例不同是一个大问题。

有什么想法吗?

我的解决方案中有一个可爱的问题...一个IEntityChangeTracker的多个实例不能引用一个实体对象,这是由于UserManager实现和...

c# asp.net-mvc entity-framework ninject
1个回答
1
投票

为了实现这一点,我如下重写了RegisterDatabase方法...

© www.soinside.com 2019 - 2024. All rights reserved.