Я получаю эту ошибку, когда конструктор посещается после POST (во время GET нет проблем).
{"Не удалось создать экземпляр типа 'MyWebsite.Website.Main.Areas.Identity.Pages.Account.LoginWith2faModel + IInputModel'. Связанные с моделью сложные типы не должны быть абстрактными или значениями идолжен иметь конструктор без параметров.
В моем StartUp.cs
я явно включил Transient Service
для интерфейса, создающего экземпляр InputModel. Я просто не могу понять, почему я получаю этоЭто потому, что в моем классе LoginWith2faModel определены и interface
, и class
?
Я спрашиваю об этом, потому что в другом проекте у меня есть настройки, аналогичные этой, и у меня не было проблем. Опять же, у меня есть конструкторкоторый берет interface
, и я передаю конкретную реализацию interface
этому классу и инициализирую его в конструкторе. Единственные различия между этим и этим - это DI ядра asp.net. Любая помощь очень ценится!
Startup.cs
services.AddTransient<LoginWith2faModel.InputModel>();
//previously I had the above set to:
//services.AddTransient<LoginWith2faModel.IInputModel,LoginWith2faModel.InputModel>();
LoginWith2faModel.cs
private readonly SignInManager<IdentityUser> _signInManager;
private readonly ILogger<LoginWith2faModel> _logger;
public LoginWith2faModel(SignInManager<IdentityUser> signInManager, ILogger<LoginWith2faModel> logger, IInputModel inputModel)
{
_signInManager = signInManager;
_logger = logger;
Input = inputModel;
}
[BindProperty]
public IInputModel Input { get; set; }
public bool RememberMe { get; set; }
public string ReturnUrl { get; set; }
public interface IInputModel
{
string TwoFactorCode { get; set; }
bool RememberMachine { get; set; }
}
public class InputModel : IInputModel
{
public string TwoFactorCode { get; set; }
public bool RememberMachine { get; set; }
}