Я просматриваю этот документ https://automapper.readthedocs.io/en/stable/Getting-started.html, чтобы попытаться настроить автомаптер, чтобы избавиться от боли при ручном отображении атрибутов.
Я сталкиваюсь со следующей ошибкой:
Сообщение: System.InvalidOperationException: Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов статических методов Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий IConfigurationProvider. экземпляр.
Этот бит - "Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией" - имеет значение, потому что я чувствую, что сделал это в моем файле startup.cs.
У меня есть следующее действие контроллера:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Index(NewCreditCardApplicationDetails applicationDetails)
{
if (!ModelState.IsValid)
{
return View(applicationDetails);
}
CreditCardApplication creditCardApplication = Mapper.Map<CreditCardApplication>(applicationDetails);
//var creditCardApplication = new CreditCardApplication
//{
// FirstName = applicationDetails.FirstName,
// LastName = applicationDetails.LastName,
// Age = applicationDetails.Age.Value,
// GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value,
// FrequentFlyerNumber = applicationDetails.FrequentFlyerNumber
//};
await _applicationRepository.AddAsync(creditCardApplication);
return View("ApplicationComplete", creditCardApplication);
}
Закомментированные строки представляют код, который работал, но я хочу удалить.
Мой метод настройки в файле startup.cs в основном веб-приложении asp.net выглядит следующим образом:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, AppDbContext dbContext)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
dbContext.Database.EnsureCreated();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
Mapper.Initialize(cfg =>
{
cfg.CreateMap<NewCreditCardApplicationDetails, CreditCardApplication>();
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
NewCreditCardApplicationDetails.cs выглядит следующим образом:
public class NewCreditCardApplicationDetails
{
[Display(Name = "First Name")]
[Required(ErrorMessage = "Please provide a first name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
[Required(ErrorMessage = "Please provide a last name")]
public string LastName{ get; set; }
[Display(Name = "Age (in years)")]
[Required(ErrorMessage = "Please provide an age in years")]
[Range(18,int.MaxValue, ErrorMessage = "You must be at least 18 years old")]
public int? Age { get; set; }
[Display(Name = "Gross Income")]
[Required(ErrorMessage = "Please provide your gross income")]
public decimal? GrossAnnualIncome { get; set; }
public string FrequentFlyerNumber { get; set; }
}
CreditCardApplication.cs выглядит так:
public class CreditCardApplication
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public decimal GrossAnnualIncome { get; set; }
public string FrequentFlyerNumber { get; set; }
}
Кто-нибудь может увидеть, в чем проблема, пожалуйста?
Спасибо.