ASP.NET Core 2.2 Многообразный constructors accepting all given argument types have been found in type 'MoviesController'

у меня есть проблема, которую я не заканчиваю понимать, и не, как решать.

Я учусь использовать ASP.NET Core с руководителями Microsoft, смотрю в других местах, чтобы учиться глобализировать и интернационализировать применение, и т.д.... и иногда я теряюсь достаточно...

Когда я выполняю Веб, Вы я функционируете без проблем, но когда я выхожу Вам на ссылку, чтобы идти в другой метод, Вы даете мне эту ошибку:

An unhandled exception occurred while processing the request. InvalidOperationException: Многообразный constructors accepting all given argument types have been found in type 'MvcMovie. Controllers. MoviesController'. Строительный There should only be one applicable. Microsoft. Extensions. DependencyInjection. ActivatorUtilities. TryFindMatchingConstructor (Type instanceType, Type [] argumentTypes, ref ConstructorInfo matchingConstructor, ref Nullable [] parameterMap)

Кажется, что Вы проблема контрольных приборов и таково, но состоит в том, что я не заканчиваю понимать porqué.

Это контрольный прибор, который, кажется, не удается:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
using MvcMovie.Models;


namespace MvcMovie.Controllers
{
    public class MoviesController : Controller
 {
    private readonly IStringLocalizer _localizer;

    public MoviesController(IStringLocalizer localizer)
    {
        _localizer = localizer;
    }

    private readonly MvcMovieContext _context;

    public MoviesController(MvcMovieContext context)
    {
        _context = context;
    }

    // GET: Movies
    public async Task Index(string movieGenre, string searchString)
    {
        //ViewData["controllerText"] = _localizer["Texto de ejemplo pasado desde el controlador."];

        // Use LINQ to get list of genres.
        IQueryable genreQuery = from m in _context.Movie
                                        orderby m.Genre
                                        select m.Genre;

        var movies = from m in _context.Movie
                     select m;

        if (!string.IsNullOrEmpty(searchString))
        {
            movies = movies.Where(s => s.Title.Contains(searchString));
        }

        if (!string.IsNullOrEmpty(movieGenre))
        {
            movies = movies.Where(x => x.Genre == movieGenre);
        }

        var movieGenreVM = new MovieGenreViewModel
        {
            Genres = new SelectList(await genreQuery.Distinct().ToListAsync()),
            Movies = await movies.ToListAsync()
        };

        return View(movieGenreVM);
    }

    // GET: Movies/Details/5
    public async Task Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var movie = await _context.Movie
            .FirstOrDefaultAsync(m => m.Id == id);
        if (movie == null)
        {
            return NotFound();
        }

        return View(movie);
    }

    // GET: Movies/Create
    public IActionResult Create()
    {
        return View();
    }

    // POST: Movies/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task Create([Bind("Id,Title,ReleaseDate,Genre,Price,Rating")] Movie movie)
    {
        if (ModelState.IsValid)
        {
            _context.Add(movie);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(movie);
    }

    // GET: Movies/Edit/5
    public async Task Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var movie = await _context.Movie.FindAsync(id);
        if (movie == null)
        {
            return NotFound();
        }
        return View(movie);
    }

    // POST: Movies/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task Edit(int id, [Bind("Id,Title,ReleaseDate,Genre,Price,Rating")] Movie movie)
    {
        if (id != movie.Id)
        {
            return NotFound();
        }

        if (ModelState.IsValid)
        {
            try
            {
                _context.Update(movie);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!MovieExists(movie.Id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }
            return RedirectToAction(nameof(Index));
        }
        return View(movie);
    }

    // GET: Movies/Delete/5
    public async Task Delete(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var movie = await _context.Movie
            .FirstOrDefaultAsync(m => m.Id == id);
        if (movie == null)
        {
            return NotFound();
        }

        return View(movie);
    }

    // POST: Movies/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task DeleteConfirmed(int id)
    {
        var movie = await _context.Movie.FindAsync(id);
        _context.Movie.Remove(movie);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    private bool MovieExists(int id)
    {
        return _context.Movie.Any(e => e.Id == id);
    }

    public IActionResult SetLanguage(string culture, string returnUrl)
    {
        Response.Cookies.Append(
            CookieRequestCultureProvider.DefaultCookieName,
            CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
            new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) 
    }
        );

        return LocalRedirect(returnUrl);
    }
   }
  }

Посмотрим Вы можете давать мне какой-то отпечаток, пожалуйста. Я помещаю вам подход к моему git, если Вы хотите бросить беглый взгляд:

https://github.com / erniker / TrainingNETCore / tree / степень магистра / MvcMovie

Большое спасибо заранее!

1
задан 05.11.2019, 01:53
1 ответ

В твоем Драйвере, estГЎs получая посредством InyecciГіn Зависимостей в travГ©s от Строителя объекты localizer и context.

В этих случаях, в которых осуществляется InyecciГіn Зависимостей, одинокая estГЎ бывший позволено, чтобы ты определил Строительный Гєnico . Это asГ, - так как, если ты определяешь mГєltiples Строители, не podrГ, - чтобы определять, который их является тем, который deberГ - в инициализировать контролирующий Класс.

ты Должен определять единственный Строитель из следующего способа:

private readonly MvcMovieContext _context;
private readonly IStringLocalizer<MoviesController> _localizer;

public MoviesController(IStringLocalizer<MoviesController> localizer, MvcMovieContext context)
{
    _localizer = localizer;
    _context = context;
}
1
ответ дан 01.12.2019, 12:47
  • 1
    Большое спасибо Рафаэль, это, что мне говорит habí в видный tambié n из-за другого трэда aquí но дело в том, что он не знал, как применять solution, сейчас все идет гениально :) – José Pablo Medina Grande 05.11.2019, 20:31
  • 2
    @José PabloMedinaGrande: Необыкновенный!. Помни что оцени всегда ответы, которые помогли тебе решать твой вопрос, с этим estará s сотрудничая с хорошим здоровьем этого сайта. – Rafael Acosta 05.11.2019, 20:32