项目之间类中的对象持久性

本文关键字:对象 持久性 之间 项目 | 更新日期: 2023-09-27 18:13:59

我知道我不应该问这个问题,但不管我错过了什么,我都快疯了!我以前这样做过很多次,我只能把它归结为年老和轻微的衰老。

我有一个类,有两个对象在构造函数中初始化…

public class EbayFunctions
{
    private static ApiContext apiContext = null;
    private static List<StoreCategoriesFlattened> storeCategories =  new List<StoreCategoriesFlattened>();
    public EbayFunctions()
    {
        ApiContext apiContext = GetApiContext();
        List<StoreCategoriesFlattened> storeCategories = GetFlattenedStoreCategories();
    }
    public string GetStoreCategoryIdForItem(string category)
    {
       var result = storeCategories.Find(x => x.CCDatabaseMatch == category);
       return ""; //Ignore will return a value
    }
}

然后我有一个表单应用程序(测试线束),利用类和按钮点击我调用一个方法…

namespace EbayTestHarness
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void cmdGetEbayStoreCatID_Click(object sender, EventArgs e)
        {
            EbayFunctions ebf = new EbayFunctions();
            string ddd = ebf.GetStoreCategoryIdForItem("Motors > Bikes");
        }
    }
}

然而,apiContext在调用之间持续存在,但storeCategoriesEbayFunctions ebf = new EbayFunctions();上填充,并且在调用string ddd = ebf.GetStoreCategoryIdForItem("Motors > Bikes");时为空。

我知道这很愚蠢,但我错过了什么?

项目之间类中的对象持久性

你的问题在这里:

private static ApiContext apiContext = null;
private static List<StoreCategoriesFlattened> storeCategories =  new List<StoreCategoriesFlattened>();
public EbayFunctions()
{
    ApiContext apiContext = GetApiContext();  // local!!
    List<StoreCategoriesFlattened> storeCategories = GetFlattenedStoreCategories();  // local!!
}

您没有设置静态字段—您引入了局部变量,然后超出作用域并(最终)被垃圾收集。取出类型指示器设置静态字段:

public EbayFunctions()
{
    apiContext = GetApiContext();
    storeCategories = GetFlattenedStoreCategories();
}

同样,正如@PatrickHofman指出的,静态成员的初始化应该只做一次——最好是在静态构造函数中:

static EbayFunctions()
{
    apiContext = GetApiContext();
    storeCategories = GetFlattenedStoreCategories();
}