I am trying to use SimpleInjector with OWIN in a WebAPI project. However, the following line in ConfigureAuth
fails
app.CreatePerOwinContext(co
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
You may find this question useful. The idea is to avoid using OWIN to resolve dependencies because it introduces some clutter to your controllers code. The following code that uses OWIN to resolve UserManager
instance is a Service Locator anti-pattern:
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
set
{
_userManager = value;
}
}
Instead of relying on OWIN to resolve dependencies, inject required services into your controller's constructor and use IDependencyResolver
to build controller for you. This article demonstrates how to use dependency injection in ASP.NET Web API.