J'essaie d'implémenter IdentityServer3 dans un projet existant qui utilise Autofac. Le problème que je suis venu à travers est que lorsque je mis mes services personnalisés, si je lance mon projet et essayer d'authentifier je reçois cette erreur:IdentityServer3 avec autofac
"An error occurred when trying to create a controller of type 'TokenEndpointController'. Make sure that the controller has a parameterless public constructor."
Maintenant, je sais que cela est une erreur de autofac générique lorsqu'un service a pas été configuré correctement. L'erreur couine en fait de mon habitude UserService indiquant:
None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Business.IdentityServer.IdentityServerUserService' can be invoked with the available services and parameters: Cannot resolve parameter 'Business.Providers.IUserProvider userProvider' of constructor 'Void .ctor(Business.Providers.IUserProvider)'.
Maintenant j'avais déjà un UserProvider avant que je commencé à utiliser IdentityServer3 et il a été créé en autofac comme ceci:
builder.RegisterType<DatabaseContext>().As<DbContext>().InstancePerDependency();
builder.RegisterType<UserProvider>().As<IUserProvider>().InstancePerDependency();
Cela fonctionnait avant, donc je sais que le UserProvider a réellement toutes ses dépendances.
Mon UserService ressemble à ceci:
public class IdentityServerUserService : UserServiceBase
{
private readonly IUserProvider _userProvider;
public IdentityServerUserService(IUserProvider userProvider)
{
_userProvider = userProvider;
}
public override async Task AuthenticateLocalAsync(LocalAuthenticationContext context)
{
var user = await _userProvider.FindAsync(context.UserName, context.Password);
if (user != null && !user.Disabled)
{
// Get the UserClaims
// Add the user to our context
context.AuthenticateResult = new AuthenticateResult(user.Id, user.UserName, new List<Claim>());
}
}
}
Est-ce que quelqu'un sait comment je peux résoudre ce problème?