Ninject в сочетании с Owin
Я пытаюсь понять, как я могу предоставить свой контекст структуры Entity, чтобы моя аутентификация работала правильно. Я инициализирую Овина так:
public void ConfigureAuth(IAppBuilder app)
{
app.CreatePerOwinContext<AppContext>(AppContext.Create); // creates EF context
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
....
}
И ApplicationUserManager выглядит так:
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<AppContext>()));
....
}
Аутентификация и все остальное работает правильно таким образом. Как видите, я получаю AppContext из контекста owin, который я ранее инициализировал.
Я хотел бы внедрить это с помощью Ninject, чтобы это выглядело так:
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
// get app context from Ninject kernel
var appContext = KernelProvider.Kernel.Get<AppContext>();
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(appContext));
----
}
В AppContext я инициализирую CurrentUser как:
public AppContext()
: base("DefaultConnection", false) // set IsIdentityV1Schema to false to prevent executing additional SQL queries
{
if (HttpContext.Current != null)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated != false)
{
currentIdentity = HttpContext.Current.User.Identity;
}
}
}
}
Это не работает, если я ввожу AppContext через Ninject. Есть ли способ сделать эту работу или, может быть, есть какой-то другой лучший способ?
Спасибо за любые предложения!