Я использую. Net Core 3 с шаблонами управления по умолчанию. Однако я добавил пользовательские поля UserFirstName и UserLastName. Я обновил код, чтобы правильно сохранить эту информацию при регистрации. Однако у меня возникли проблемы со страницей «Управление профилем», где мне нужно загрузить и сохранить UserFirstName и UserLastName. Я создал класс UserBO для чтения и сохранения этой информации и обновил Areas \ Identity \ Pages \ Account \ Manage \ index.cs html .cs следующим образом:
namespace InvoiceJobManager.Areas.Identity.Pages.Account.Manage
{
public partial class IndexModel : PageModel
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly UserBO _userBO;
public IndexModel(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
UserBO userBO
)
{
_userManager = userManager;
_signInManager = signInManager;
_userBO = userBO;
}
public string Username { get; set; }
[TempData]
public string StatusMessage { get; set; }
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Phone]
[Display(Name = "Phone number")]
public string PhoneNumber { get; set; }
[Display(Name = "First Name")]
public string UserFirstName { get; set; }
[Display(Name = "Last Name")]
public string UserLastName { get; set; }
}
private async Task LoadAsync(ApplicationUser user)
{
var userName = await _userManager.GetUserNameAsync(user);
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
var fn = await _userBO.GetFirstName(new Guid(user.Id));
Username = userName;
Input = new InputModel
{
PhoneNumber = phoneNumber,
UserFirstName = fn
};
}
...
public async Task<IActionResult> OnPostAsync()
{
...
}
}
}
Мой класс ApplicationUser:
public class ApplicationUser : IdentityUser
{
public string UserFirstName { get; set; }
public string UserLastName { get; set; }
}
Я обновил ConfigureServices следующим образом:
services
.AddSingleton(_ => Configuration)
.AddScoped<IUserBO, UserBO>()
.AddMvc()
.AddXmlSerializerFormatters()
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
Однако я получаю следующую ошибку времени выполнения при доступе к странице «Управление профилем»:
InvalidOperationException Не удалось разрешить службу для типа «InvoiceJobManager.BusinessObjects.UserBO» при попытке активировать «InvoiceJobManager.Areas.Identity.Pages.Account.Manage.IndexModel». Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService (IServiceProvider sp, Тип типа, Тип requiredBy, bool isDefaultParameterRequired)
InvalidOperationException: Невозможно разрешить службу для типа «InvoiceJobManager.BusinessObjects.JobjectSigner» Areas.Identity.Pages.Account.Manage.IndexModel. Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService (IServiceProvider зр, тип тип, тип requiredBy, BOOL isDefaultParameterRequired) lambda_method (Закрытие, IServiceProvider, объект []) Microsoft.AspNetCore. * +1021 * .RazorPages.Infrastructure.DefaultPageModelActivatorProvider + <> c__DisplayClass1_0.b__0 (Контекст контекста страницы) .RazorPages.Infrastructure.PageActionInvoker.Next (ref State next, ref Область действия, состояние объекта ref, ref bool isCompleted) Microsoft.AspNetCore. Mvc .RazorPages.Infrastructure.PageActionInvoker.InvokeInnerFilterAsyn cIn. Microsoft. 1027 * .Infrastructure.ResourceInvoker.g__Awaited | 24_0 (ResourceInvoker invoker, Task lastTask, State next, область действия области, состояние объекта, bool isCompleted) Microsof t.AspNetCore. Mvc .Infrastructure.ResourceInvoker.Rethrow (контекст ResourceExecutedContextSealed) . Mvc .Infrastructure.ResourceInvoker.InvokeFilterPipelineAsyn c () Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.g__Awaited | 17_0 (активатор ресурса ResourceInvoker, задача задачи, IDisposable scope) 6_0 (конечная точка конечной точки, задача TaskTask, средство ведения журнала ILogger) контекст) Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCor e.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.Invoke (HttpContext httpContext) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext)
*1016* Конечно, прямая инъекция и возможность вызывать все, что я мог бы сделать, вызывая прямую инъекцию и вызывая зависимость база данных, но это было бы не очень чисто. Каков наилучший способ исправить это?