Я не прошел детальную проработку примера, но я был бы весьма обеспокоен реализацией синглтона:
public static readonly ShoppingCart Instance;
Поскольку это веб-приложение ASP.Net, у вас будетодна корзина покупок для каждого отдельного пользователя, который подключается к веб-сайту, в отличие от одного экземпляра для каждого сеанса пользователя.Это явно не хороший дизайн.
На самом деле, в разделе комментариев есть по крайней мере один пользователь, который спросил: «Пожалуйста, скажите мне, как создать новую корзину, а не использовать одну и ту же корзину для всех пользователей».
Я думаю, что вам было бы лучше что-то вроде этого:
Изменить:
public static readonly ShoppingCart Instance;
на:
// Method to retrieve the current user's shopping cart, stored in their session
public static ShoppingCart Instance() {
ShoppingCart value;
// If the cart is not in the session, create one and put it there
// Otherwise, get it from the session
if (HttpContext.Current.Session["ASPNETShoppingCart"] == null) {
value = new ShoppingCart();
value.Items = new List<CartItem>();
HttpContext.Current.Session["ASPNETShoppingCart"] = value;
} else {
value = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
}
return value;
}
Затем удалитьстатический конструктор в целом.
Единственное изменение, которое вам придется внести в остальную часть кода, это ShoppingCart.Instance.
становится ShoppingCart.Instance().