I recently tried to implement authentication using asp.net identity with 4.6.1 framework. After installing all the required packages I am getting the following error when runnin
Configure the OWIN startup class in your web.config
/ app.config
appSettings
like this:
<add key="owin:AppStartup" value="-- your startup class --" />
The problem has to do with the way that OWIN looks for the Startup class. For some strange reason, it finds ITypeRegistrationsProvider
and tries to load it.
OWIN has three ways to look for the application startup class:
<add key="owin:AppStartup" value="..." />
If you look carefully the call stack, you'll see that the problem is related to the second one, looking for the attribute: Owin.Loader.DefaultLoader.SearchForStartupAttribute
. For some reason it finds ITypeRegistrationsProvider
is suitable as an Startup class, and tries to instance it. Apart from being incorrect, it fails because you cannot instance an interface.
Once you know what the problem is, if you read OWIN source code, in particular OwinBuilder.GetAppStartup, you'll see that the first option to find the startup class is to use the one specified in appSettings
:
string appStartup = ConfigurationManager.AppSettings[Constants.OwinAppStartup];
If you specify yous startup class in web.config
you'll prevent the application from looking and trying to instance the wrong class. So, to solve the problem, you simply have to specify the app startup class in your web.config
or app.config
appSettings
, like this:
<appSettings>
<add key="owin:AppStartup" value="-- your startup class --" />
</appSettings>
Notes:
owin:appStartup
, but if you check the source code you'll see that the right syntax is owin:AppStartup
(OwinAppStartup constant, as used in the code snippet above)If your configuration is right, I warranty that the Owin loader will take your real startup class, and the error will not happen.