Контроллер ядра Automapper asp.net - Mapper Not Initialized Error - PullRequest
0 голосов
/ 22 марта 2019

Я просматриваю этот документ 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; }
}

Кто-нибудь может увидеть, в чем проблема, пожалуйста?

Спасибо.

1 Ответ

0 голосов
/ 22 марта 2019

Оформить заказ: https://medium.com/ps-its-huuti/how-to-get-started-with-automapper-and-asp-net-core-2-ecac60ef523f

Вы должны ввести маппер, чтобы использовать его, а не использовать статический.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...