Ошибка сервера в приложении '/'. Для данного объекта не определ

ASP.NET
  1. 3 года назад
    Ошибка сервера в приложении '/'.
    Для данного объекта не определено беспараметрических конструкторов.
    Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
    
    Сведения об исключении: System.MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.
    
    Ошибка источника:
    
    Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.
    
    Трассировка стека:
    
    
    [MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.]
       System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
       System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +119
       System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232
       System.Activator.CreateInstance(Type type, Boolean nonPublic) +83
       System.Activator.CreateInstance(Type type) +11
       System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +55
    
    [InvalidOperationException: An error occurred when trying to create a controller of type 'GameStore.WebUI.Controllers.GameController'. Make sure that the controller has a parameterless public constructor.]
       System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +178
       System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +76
       System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +88
       System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +194
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
    
    
    Информация о версии: Платформа Microsoft .NET Framework, версия:4.0.30319; ASP.NET, версия:4.6.1038.0 
    

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using GameStore.Domain.Abstract; using GameStore.Domain.Entities; using GameStore.WebUI.Models; namespace GameStore.WebUI.Controllers { public class GameController : Controller { private IGameRepository repository; public int pageSize = 4; /// <summary> /// Помимо удаления метода действия Index() мы добавили конструктор, который объявляет зависимость от интерфейса IGameRepository. Это приводит к внедрению библиотекой Ninject данной зависимости для хранилища игр при создании экземпляра класса контроллера. Вдобавок также импортировано пространство имен GameStore.Domain, поэтому на классы хранилища и модели можно ссылаться, не указывая их полностью определенные имена. /// </summary> public GameController(IGameRepository repo) { repository = repo; } //было //public ViewResult List() //{ // return View(repository.Games); //} public ViewResult List(string category, int page = 1) { //после GamesListViewModel //Теперь можно обновить метод действия List() класса GameController так, чтобы он использовал класс GamesListViewModel для снабжения представления сведениями о товарах, отображаемых на страницах, и информацией о разбиении на страницы: //Внесенные изменения обеспечивают передачу объекта GamesListViewModel представлению в качестве данных модели. //Следующий шаг заключается в обновлении класса GameController, чтобы метод действия List() фильтровал объекты Game по категории и использовал только что добавленное в модель представления свойство для указания категории, выбранной в текущий момент. Соответствующие изменения приведены в примере ниже: //В этот метод действия внесены три изменения. Первое - добавлен новый параметр по имени category. Он используется вторым изменением, которое представляет собой расширение запроса LINQ. Если значение category не равно null, значит, выбраны только те объекты Game, которые соответствуют значению свойства Category. Последнее, третье, изменение касается установки значения свойства CurrentCategory, которое было добавлено в класс GamesListViewModel. Однако в результате этих изменений значение PagingInfo.TotalItems будет вычисляться некорректно. Со временем мы все исправим. GamesListViewModel model = new GamesListViewModel { Games = repository.Games .Where(p => category == null || p.Category == category) .OrderBy(game => game.GameId) .Skip((page - 1)*pageSize) .Take(pageSize), PagingInfo = new PagingInfo { CurrentPage = page, ItemsPerPage = pageSize, //Понадобится также скорректировать ссылки на страницы, чтобы они правильно работали, когда выбрана какая-то категория. В настоящий момент количество ссылок на страницы определяется общим числом товаров, а не количеством товаров выбранной категории. Это значит, что пользователь может щелкнуть на ссылке для страницы 2 категории "Шутер" и получить пустую страницу, поскольку товаров данной категории не хватает для заполнения второй страницы. //При наличии выбранной категории возвращается количество элементов в этой категории, а в противном случае - общее количество товаров. TotalItems = category == null ? repository.Games.Count() : repository.Games.Where(game => game.Category == category).Count() }, CurrentCategory = category }; return View(model); } public FileContentResult GetImage(int gameId) { Game game = repository.Games .FirstOrDefault(g => g.GameId == gameId); if (game != null) { return File(game.ImageData, game.ImageMimeType); } else { return null; } } } }

  2. GameStore MVC

  3. Для данного объекта не определено беспараметрических конструкторов.

    Как определить для какого объекта?

  4. Alexandr_Erohin

    Nov 25 Администратор
    Добавлено 3 года назад Alexandr_Erohin

    Как определить для какого объекта?

    Использовать отладчик Visual Studio, добавить точку останова в начало кода и с помощью F11 построчно пройти отладчиком. На той строке где будет выдавать исключение и будет ошибка. Более подробно - Отладка кода в Visual Studio

  5. Добавлено 3 года назад i1329844

    Добавила в параметры исключений System.MissingMethodException

    При запуске

    Вызвано исключение: "System.MissingMethodException" в mscorlib.dll
    
    Дополнительные сведения: Для данного объекта не определено беспараметрических конструкторов.

    В браузере пишет

    Ошибка сервера в приложении '/'.
    Для данного объекта не определено беспараметрических конструкторов.
    Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
    
    Сведения об исключении: System.MissingMethodException: Для данного объекта не определено беспараметрических конструкторов.
    
    Ошибка источника:
    
    Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.
    

    VS никаких строчек с исключением не указывает

  6. Добавлено 3 года назад i1329844

    после добавления беспараметрического конструктора

    public GameController()
    		{
    		}
    public GameController(IGameRepository repo)
            {
                repository = repo;
            }
     Ссылка на объект не указывает на экземпляр объекта.
    Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.
    
    Сведения об исключении: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
    
    GamesListViewModel model = new GamesListViewModel

    зачем он требует беспараметричесий?

  7. Alexandr_Erohin

    Nov 30 Администратор
    Добавлено 3 года назад Alexandr_Erohin

    Конструктор по умолчанию используется при внедрении зависимостей, вы скорее всего забыли добавить распознаватель зависимостей, как было описано в статье с интернет-магазином:

    NinjectDependencyResolver.cs

    public class NinjectDependencyResolver : IDependencyResolver
    {
            private IKernel kernel;
    
            public NinjectDependencyResolver(IKernel kernelParam)
            {
                kernel = kernelParam;
                AddBindings();
            }
    
            public object GetService(Type serviceType)
            {
                return kernel.TryGet(serviceType);
            }
    
            public IEnumerable<object> GetServices(Type serviceType)
            {
                return kernel.GetAll(serviceType);
            }
    
            private void AddBindings()
            {
                // Проверьте указаны ли здесь привязки
            }
    }

    NinjectWebCommon.cs

    private static void RegisterServices(IKernel kernel)
    {
        // Обязательно нужна регистрация распознавателя
        System.Web.Mvc.DependencyResolver.SetResolver(new
            GameStore.WebUI.Infrastructure.NinjectDependencyResolver(kernel));
    } 

или зарегистрируйтесь чтобы ответить