I am trying to use SimpleInjector with OWIN in a WebAPI project. However, the following line in ConfigureAuth
fails
app.CreatePerOwinContext(container.GetInstance<ApplicationUserManager>);
The exception is The ApplicationUserManager is registered as 'Web API Request' lifestyle, but the instance is requested outside the context of a Web API Request.
I am using container.RegisterWebApiRequest<ApplicationUserManager>();
in container initialization. (there won't be any exceptions if I use Register
instead of RegisterWebApiRequest
but this is not the preferred method as per simple injector docs)
As I understand, ApplicationUserManager
needs to be registered using CreatePerOwinContext
for OWIN to work properly. I wonder how do we do this using Simple Injector given that Simple Injector cannot resolve instances during startup.
I have already tried the method in this SO answer but it fails with the same message.
Any idea how can I resolve this?
I used the following code to solve this issue.
public static void UseOwinContextInjector(this IAppBuilder app, Container container)
{
// Create an OWIN middleware to create an execution context scope
app.Use(async (context, next) =>
{
using (var scope = container.BeginExecutionContextScope())
{
await next.Invoke();
}
});
}
and then called app.UseOwinContextInjector(container);
right after registering the dependancies.
Thanks to this post
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With