Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebApi + Simple Injector + OWIN

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 RegisterWebApiRequestbut 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?

like image 878
su8898 Avatar asked Dec 17 '14 08:12

su8898


1 Answers

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

like image 182
su8898 Avatar answered Oct 04 '22 21:10

su8898