у меня есть проблема, которую я не заканчиваю понимать, и не, как решать.
Я учусь использовать 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
Большое спасибо заранее!
В твоем Драйвере, 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;
}