Произошло необработанное исключение типа «System.StackOverflowException» в com.services.dll - PullRequest
0 голосов
/ 16 февраля 2019

Я новичок и изучаю ASP.NET MVC. Мое приложение работало отлично. Я узнал об Singleton, но после включения шаблона Singleton в свое приложение я получаю исключение для своего класса ProductService, который находится в com.service.проект. У меня есть решение, и в этом решении у меня есть 4 проекта с этими именами com.Entities, com.database, com.services, com.web

Я пытался проверить использование кода управляемой совместимостив Сервис -> Параметры -> Использовать ManagedCode

com.service: Получение исключения в общедоступном статическом экземпляре ProductService

public class ProductService

{

public  static ProductService Instance
    {
        get 
        {
             if (Instance == null) instance = new ProductService();
             return instance;
        }
    }

    private static ProductService instance { get; set; }

    private ProductService() {}

    CContext context = new CContext();

    public List<Product> GetProducts()
    { 
         return context.Products.Include(x => x.Category).ToList(); 
    }

}

com.web: контроллер

[HttpGet]
public ActionResult Edit(int id)
{
     var prod = ProductService.Instance.GetProduct(id);
     UpdateProductViewModels editModel = new UpdateProductViewModels ();
     editModel.ID = prod.ID;
     editModel.Name = prod.Name;
     editModel.CategoryID = prod.Category != null ? prod.Category.ID : 0;
     editModel.CategoryList = CategoryService.Instance.GetCategories();
     return PartialView(editModel);
    }

com.Entities

public class BaseEntity
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool isFeatured { get; set; }
    public string ImageURL { get; set; }
}

пространство имен com.Entities

public class Product : BaseEntity
{
    public decimal Price { get; set; }
    public int CategoryID { get; set; }
    public Category Category { get; set; }
}

1 Ответ

0 голосов
/ 17 февраля 2019

Проблема в том, что вы ссылаетесь на Экземпляр вместо экземпляра локального члена.

Обычно рекомендуется помещать что-то вроде подчеркивания перед локальным элементом, чтобы его было легче идентифицировать.

Метод получения в экземпляре должен выглядеть следующим образом:

            if (instance == null) instance = new ProductService();
            return instance;

Я бы рекомендовал переименовать его в _instance, чтобы избежать путаницы.

HTH

wazdev

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...