从 Project2 Class2 调用时,在 Project1 Class1 中声明为 public 的对象始终显示为 null

Object declared as public in Project1 Class1 always shows as null when called from Project2 Class2

我正在使用 C#、.Net Framework 4.5 我的解决方案中有两个项目,假设是 Project1 和 Project2,其中添加了 Project1 作为 Project2 的参考。 在 Project1 中,我有一个静态 class "Global",其中我声明了一个 public 静态对象列表:

namespace Solution.Project1
{
    public static class Global
    {
        public static List<OM.User> AllActiveUsers;
    }
}

在项目 2 中,我还有一个静态 class "UserFactory",其中我有一个使用项目 1 中的 "AllActiveUsers" 变量的静态方法:

namespace Sol.Project2
{
    public static class UserFactory
    {
    public static List<OM.User> GetUsersDetails()
        {
            List<OM.User> ret = new List<OM.User>();

            foreach (OM.User user in Project1.Global.AllActiveUsers) //here is the problem
            {
                //TODO: write logic
            }

            return ret;
        }
    }
}

我确保 AllActiveUsers 已启动并填充了 5 个用户对象,尽管在 Project2 中调用此处时它显示为空! 什么会导致这种情况?

更新: sorry我好像明白了,我忘了project2里面的方法不是直接调用的,是通过webservice调用的:

await ModMain.objWebService.GetUsersDetailsAsync();

但是如果我立即从 UserFactory 调用我的方法:

UserFactory.GetUsersDetails();

那么 AllActiveUsers 不为空。 这是导致这个问题的原因吗? 也许这个 post 被转换成一个关于从 webservice 调用方法时的问题的信息。

它必须是您初始化列表的地方。你说 program.cs 但我已经像这样复制了你的代码。

项目 2:

class Program
{
    static void Main(string[] args)
    {
        ConsoleApplication1.Global.AllActiveUsers = new List<string>() { "test1", "test2" };
        UserFactory.GetUsersDetails();
    }
}

public static class UserFactory
{
    public static List<string> GetUsersDetails()
    {
        List<string> ret = new List<string>();

        foreach (string user in ConsoleApplication1.Global.AllActiveUsers) //here is the problem
        {
            //TODO: write logic
        }

        return ret;
    }
}

项目 1

public static class Global
{
    public static List<string> AllActiveUsers;
}

你这工作正常,因为我在调用静态方法之前内联初始化列表。

如果您提供了初始化列表的确切位置,那么它可能会更清楚地说明您的问题。

经过一番搜索,我想我找到了问题。

Web 服务应用程序中的静态变量对工作进程有生命周期 link,因此它们可能会自动重新初始化。它们不应该用于此类应用程序。来源之一:Web service variable shared for the lifetime of the webservice?

一个解决方案可能是使用应用程序状态来存储请求之间的对象:http://www.codeproject.com/Articles/13402/Building-web-services-with-persistent-state