我的解决方案中有一个可爱的问题...
一个实体对象不能被的多个实例引用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
,然后是BaseDbContext
。 AnotherDbContext
不在任何重要的地方使用,因此我的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实现和...
为了实现这一点,我如下重写了RegisterDatabase
方法...