Я пытаюсь вызвать функцию входа в свой LoginController. Я использую Identity Framework, но у меня возникают проблемы с разрешением зависимостей.
Я пытался расширить интерфейсы по умолчанию для моих собственных классов, и я только что попытался использовать значения по умолчанию. Я не думаю, что у меня есть правильное понимание того, что происходит, когда вводятся зависимости.
IdentityUserManager - это мой пользовательский менеджер пользователей, который расширяет стандартный Identity User Manager. DataContext расширяет IdentityDBContext.
LoginController
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public class LoginController : Controller
{
#region Private Fields
private readonly SignInManager<IdentityUser> _signInManager;
private readonly IdentityUserManager _identityUserManager;
private readonly IDataContext _context;
#endregion
#region Constructors
public LoginController(SignInManager<IdentityUser> signInManager, IdentityUserManager identityUserManager, IDataContext context)
{
this._signInManager = signInManager;
this._identityUserManager = identityUserManager;
this._context = context;
}
Мой класс IdentityUserManager. Интерфейс IIdentityUserManager ничего не делает, кроме указания моих 3 пользовательских методов.
public class IdentityUserManager : UserManager<IdentityUser>, IIdentityUserManager
{
private readonly IDataContext _context;
private readonly ILDAPUserManager _ldapUserManager;
private IUserStore<IdentityUser> _userStore;
/// <summary>
/// Constructor for Identity User Manager
/// </summary>
/// <param name="context">Data context</param>
/// <param name="userStore">Provides abstraction for store that manages user accounts</param>
/// <param name="identityOptions">Retrieves identity options</param>
/// <param name="passwordHasher">Abstraction for hashing passwords</param>
public IdentityUserManager(ILDAPUserManager ldapUserManager, IDataContext context, IUserStore<IdentityUser> userStore): base(userStore, null, null, null, null, null, null, null, null)
{
this._ldapUserManager = ldapUserManager;
this._context = context;
this._userStore = userStore;
}
Из моего автозагрузки.cs
services.AddIdentityCore<IdentityUser>(); // .AddEntityFrameworkStores<DataContext>();
services.AddDbContext<IDataContext, DataContext>();
services.AddScoped<ILDAPUserManager, LDAPUserManager>();
services.AddScoped<UserManager<IdentityUser>, IdentityUserManager>();
services.AddScoped<IUserStore<IdentityUser>, IdentityUserStore>();
services.AddTransient<SignInManager<IdentityUser>>();
services.AddTransient<IDbConfig, DataContextFactory>();
Это сообщение об ошибке, которое выдается
System.InvalidOperationException: Unable to resolve service for type 'CareInTime.Service.Controllers.IdentityUserManager' while attempting to activate 'CareInTime.Service.Controllers.LoginController'.
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, Boolean isDefaultParameterRequired)
at lambda_method(Closure , IServiceProvider , Object[] )
at Microsoft.AspNetCore.Mvc.Controllers.ControllerActivatorProvider.<>c__DisplayClass4_0.<CreateActivator>b__0(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.<>c__DisplayClass5_0.<CreateControllerFactory>g__CreateController|0(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeInnerFilterAsync>d__14.MoveNext()
--- End of stack trace from previous location where exception was thrown ---