Simple Injector no puede inyectar por clase registrada de solicitud de API web durante el inicio de Owin

Estoy creando una API usando Owin, Web API, Entity Framework, ASP.NET Identity. Estoy usandoInyector simple como mi marco DI de elección.

Durante el proceso de inicio de Owin, quiero sembrar mi base de datos con algunos datos de muestra. Esto es manejado por una clase que implementaIDatabaseInitializer, que se parece a esto:

public class MyDbInitializer : DropCreateDatabaseAlways<MyDataContext>
{
    private readonly IUserManager _userManager;

    public MyDbInitializer(IUserManager userManager)
    {
        _userManager = userManager;
    }

    protected override void Seed(MyDataContext context)
    {
        SeedIdentities();
    }

    private void SeedIdentities()
    {
        var user = new User
        {
            UserName = "someUsername",
            Email = "[email protected]"
        };

        _userManager.CreateAsync(user, "Password");
    }

IUserManager es un proxy para la identidad ASP.NETUserManager clase, que indirectamente depende deIUnitOfWork. En caso de que te lo estés preguntando,IUserManager está registrado así:

container.Register(typeof(IUserManager), 
    () => container.GetInstance<IUserManagerFactory>().Create());

Como quiero usar una sola unidad de trabajo por solicitud de API web, he registrado miIUnitOfWork de la siguiente manera:

container.RegisterWebApiRequest<IUnitOfWork, MyUnitOfWork>();

Esto funciona bien y dandy para todo excepto al resolver elIUserManager dependencia en elMyDbInitializer clase. Durante el inicio de la aplicación, SimpleInjector falla con la siguiente ActivationException:

SimpleInjector.ActivationException was unhandled by user code
  HResult=-2146233088
  Message=The registered delegate for type IUserManagerFactory threw an exception. The IUnitOfWork is registered as 'Web API Request' lifestyle, but the instance is requested outside the context of a Web API Request.
   Source=SimpleInjector
   StackTrace:
     at SimpleInjector.InstanceProducer.GetInstance()
     at SimpleInjector.Container.GetInstance[TService]()
     at Project.WebApi.CompositionRoot.SimpleInjectorCompositionRoot.<RegisterSecurityDependencies>b__c() in c:\code\Project\Project.WebApi\CompositionRoot\SimpleInjectorCompositionRoot.cs:line 130
     at lambda_method(Closure )
     at lambda_method(Closure )
     at SimpleInjector.InstanceProducer.GetInstance()
   InnerException: SimpleInjector.ActivationException
     HResult=-2146233088
     Message=The IUnitOfWork is registered as 'Web API Request' lifestyle, but the instance is requested outside the context of a Web API Request.
     Source=SimpleInjector
     StackTrace:
        at SimpleInjector.Scope.GetScopelessInstance[TService,TImplementation](ScopedRegistration`2 registration)
        at SimpleInjector.Scope.GetInstance[TService,TImplementation](ScopedRegistration`2 registration, Scope scope)
        at SimpleInjector.Advanced.Internal.LazyScopedRegistration`2.GetInstance(Scope scope)
        at lambda_method(Closure )
        at SimpleInjector.InstanceProducer.GetInstance()
     InnerException:

Supongo que el OwinStartup.cs se considera que la clase está fuera del ciclo de vida de la solicitud de la API web, y la inyección del constructor en el inicializador de la base de datos falla porque es invocada porStartup.cs clase.

No estoy seguro de cómo resolver este problema. ¿Debo usar un estilo de vida híbrido para el registro deIUnitOfWork¿O hay alguna solución mejor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta