After adding Simple Injector to my project to create an instance of my UserAppManager that will exist through the whole lifetime of a session I started to recieve errors:
Error with no parameterless constructor:
An error occurred when trying to create a controller of type 'AuthController'. Make sure that the controller has a parameterless public constructor.
Error with a parameterless constructor:
For the container to be able to create AuthController it should have only one public constructor: it has 2.
I followed a guide (https://simpleinjector.codeplex.com/discussions/564822) to avoid getting the UserManager from the Request.GetOwinContext() and doing it using the constructor but without luck. What am I doing wrong?
Startup:
public class Startup
{
public void Configuration(IAppBuilder app)
{
...
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(httpConfig);
DependencyConfig.InjectDependencies(app);
}
}
AuthController:
[RoutePrefix("api/auth")]
public class AuthController : ApiController
{
readonly private AppUserManager _appUserManager;
public AuthController(AppUserManager appUserManager)
{
_appUserManager = appUserManager;
}
}
DependencyConfig:
public class DependencyConfig
{
public static void InjectDependencies(IAppBuilder app)
{
var container = new Container();
container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();
container.Register<AppDbContext>(Lifestyle.Scoped);
container.Register<IUserStore<AppUser>>(() => new UserStore<AppUser>(container.GetInstance<AppDbContext>()), Lifestyle.Scoped);
container.Register<AppUserManager>(Lifestyle.Scoped);
// other service injections
container.RegisterWebApiControllers(GlobalConfiguration.Configuration);
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);
app.CreatePerOwinContext(() => container.GetInstance<AppUserManager>());
}
}