代码重用导致StackOverFlow异常

时间:2018-09-26 14:28:32

标签: entity-framework asp.net-mvc-5 stack-overflow code-reuse

我将MVC5与Entity Framework一起使用,并且我的应用程序具有2层(项目):数据层(DL)和组合的业务/演示层(BPL)。 CRUD操作在DL中定义,并通过和接口在BPL中访问。 BPL中的类相互依赖,也取决于DL。我试图在下面的图片中显示该场景: enter image description here

上图显示CustomerItemViewModelConntroller同时依赖于ICRUDOperations和CustomerBusinessLogic。执行create方法时,在创建CustomerItemBusinessLogic实例时,它将首先读取CRUDOperations,而在CustomerItemBusinessLogic启动时,它将再次读取CRUDOperations。这是完成单个过程之前的两次阅读。

我有一个StackOverFlow异常,我怀疑是由于这种多次访问。我会得到纠正。有没有办法解决这么多读物?这可能是引起StackOverFlow异常的原因吗?

以下是该异常的摘要:

  

System.StackOverflowException未处理     HResult = -2147023895     消息=类型'System.StackOverflowException'的异常被抛出。     InnerException:

发生异常的代码段:

public sealed class GetCRUDAction
{
    public ICRUDCollections<Customer> getCustomerCRUD()
    {
        return new CustomerCRUD();
    }
}

CustomerCRUD执行正常的数据库读取,更新和删除操作。下面的示例是CustomerCRUD的创建方法

public Customer Create(Customer cust)
{
    using (var db = new DbConxn())
    {
        db.Customers.Add(cust);
        db.SaveChanges();
        return cust;
    }
}

我的控制器代码如下:

private ICRUDCollections<Customer> _cust = new GetCRUDAction().getCustomerCRUD();
private CustomerItemBusinessLogic _bl = new CustomerItemBusinessLogic();

    // GET: CustomerItemViewModel/Index
     public ActionResult Index()
    {
        return View(_cust.Read());
    }

// Post: CustomerItemViewModel/Create
     public ActionResult Create(FormCollection collection)
    {
        Customer cust = _bl.setCustomerItems(collection);
        Item item = _bl.setItemDetails;
        return RedirectToAction("Index");
    }

最后,CustomerItemBusinessLogic看起来像:

private ICRUDCollections<Customer> _cust = new GetCRUDAction().getCustomerCRUD();
public Customer setCustomerItems(FormCollection collection)
{
   Customer cust = new Customer();
   string c_name = collection["cust_Name"];
   return cust;
}

重复是在Controller和BusinessLogic类中的:

私有ICRUDCollections _cust =新的GetCRUDAction()。getCustomerCRUD();

0 个答案:

没有答案