Odwołanie do obiektu nie zostało usawione

0

Cześć uczę sie ASP.NET i mam takie pytanie dlaczrgo wysyakuje mi ten błąd skoro wszystko deklaruje wiem ze codzi tu chyba o wstrzykiwanie zależności ale nie mam pojęcia jak to zrobić bardzo prosze o pomoc z góry dziękuje :)

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Sklep.Infrastructure;
using Sklep.Models;
using Sklep.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace Sklep.Controllers
{
    public class OrderController : Controller
    {
        private OrderManager orderManager;
        private ApplicationDbContext db;
        private ISessionManager session { get; set; }
 
        public OrderController()
        {
 
        }
 
        public OrderController(ApplicationDbContext db,  ISessionManager session)
        {
            this.db = db;
            this.session = session;
            orderManager = new OrderManager(session, db);
        }
 
 
        private ApplicationUserManager _userManager;
        public ApplicationUserManager UserManager
        {
            get
            {
                return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
            }
            private set
            {
                _userManager = value;
            }
        }
 
 
        public ActionResult Index()
        {
            var orderItems = orderManager.GetBasket();
            var totalValue = orderManager.GetTotalValue();
            OrderViewModel vm = new OrderViewModel()
            {
                OrderItems = orderItems,
                TotalValue = totalValue
            };
            ViewBag.Amount = orderItems.Count;
            return View(vm);
             
        }
 
        public ActionResult AddToBasket(int id)
        {
            orderManager.AddToBasket(id);
            TempData["message"] = "Pomyślnie dodano do koszyka";
            return RedirectToAction("Index", "Home");
        }
 
        public int AmountItems()
        {
            var basketAmount = orderManager.GetAmountBasketItems();
            return basketAmount;
        }
 
        public ActionResult DeleteFromBasket(int id)
        {
            var orderItems = orderManager.GetBasket();
 
            var basketItem = orderItems.Find(x => x.ProductId == id);
 
            if (basketItem.Quantity >= 2)
            {
                basketItem.Quantity--;
            }
            else
            {
                orderItems.Remove(basketItem);
            }
 
            var totalValue = orderManager.GetTotalValue();
            OrderViewModel vm = new OrderViewModel()
            {
                OrderItems = orderItems,
                TotalValue = totalValue
            };
            ViewBag.Amount = orderItems.Count;
            return RedirectToAction("Index", vm);
 
        }
 
        [HttpGet]
        public ActionResult Pay()
        {
            if(Request.IsAuthenticated)
            {
                var userId = User.Identity.GetUserId();
                var user = UserManager.FindById(userId);
 
                var order = new Order()
                {
                    FirstName = user.FirstName,
                    SecondName = user.SecondName,
                    Adress = user.Adress,
                    City = user.City,
                    ZipCode = user.ZipCode,
                    Phone = user.PhoneNumber,
                    Email = user.Email
                     
                };
 
                return View(order);
            }
            else
            {
                return RedirectToAction("Login", "Account", new { returnUrl = Url.Action("Pay", "Order") });
            }
        }
 
        [HttpPost]
        public ActionResult Pay(Order order)
        {
            if(ModelState.IsValid)
            {
                var userId = User.Identity.GetUserId();
                var newOrder = orderManager.CreateOrder(order, userId);
 
 
                var user = UserManager.FindById(userId);
                TryUpdateModel(user);
                UserManager.Update(user);
 
                orderManager.EmptyBasket();
 
                TempData["message"] = "Dziękujemy za złożenie zamówienia";
                return RedirectToAction("Index", "Home");
 
 
            }
            else
            {
                return View(order);
            }
        }
    }
}
0

System.NullReferenceException: „Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

orderManager było null. Kurcze taki

0

Wywal constructor bezparametrowy. Bo pewnie on się wywołuje a tam nie masz ustawienia m.in. orderManager. I zarejestruj w contenerze Context oraz ISessionManager

0
szydlak napisał(a):

Wywal constructor bezparametrowy. Bo pewnie on się wywołuje a tam nie masz ustawienia m.in. orderManager

Kurcze to potem wyskakuje mi właśnie coś takiego System.InvalidOperationException: „Wystąpił błąd podczas próby utworzenia kontrolera typu Sklep.Controllers.OrderController. Upewnij się, że kontroler ma publicznego konstruktora bez parametrów.”
MissingMethodException: Dla tego obiektu nie zdefiniowano konstruktora bez parametrów.

0
Michał Warmuz napisał(a):
szydlak napisał(a):

Wywal constructor bezparametrowy. Bo pewnie on się wywołuje a tam nie masz ustawienia m.in. orderManager

Kurcze to potem wyskakuje mi właśnie coś takiego System.InvalidOperationException: „Wystąpił błąd podczas próby utworzenia kontrolera typu Sklep.Controllers.OrderController. Upewnij się, że kontroler ma publicznego konstruktora bez parametrów.”
MissingMethodException: Dla tego obiektu nie zdefiniowano konstruktora bez parametrów.

Jeśli to jest MVC 5 (Nie .Net Core) to musisz użyć jakiegoś kontenera np Autofac i zarejestrować w nim to co jest w konstruktorze controllera

0
szydlak napisał(a):
Michał Warmuz napisał(a):
szydlak napisał(a):

Wywal constructor bezparametrowy. Bo pewnie on się wywołuje a tam nie masz ustawienia m.in. orderManager

Kurcze to potem wyskakuje mi właśnie coś takiego System.InvalidOperationException: „Wystąpił błąd podczas próby utworzenia kontrolera typu Sklep.Controllers.OrderController. Upewnij się, że kontroler ma publicznego konstruktora bez parametrów.”
MissingMethodException: Dla tego obiektu nie zdefiniowano konstruktora bez parametrów.

Jeśli to jest MVC 5 (Nie .Net Core) to musisz użyć jakiegoś kontenera np Autofac i zarejestrować w nim to co jest w konstruktorze controllera

A pomógłbyś mi jak ma to zrobić jak zarejestrować bo pobrałem Autofac z nuggeta ale jestem kompletnie zielony z tego.

0
szydlak napisał(a):

Wujek google pomoże: http://jakubskoczen.pl/2016/07/06/jak-dodac-kontener-autofac-do-aplikacji-asp-net-mvc/

Kurcze nie rozumiem wgl na jakej zasadzie to sie odbywa oraz co musze zrobić w tym punkcie kurcze
a moge to zrobic tak samo ninject ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1