C# 两类C中的引用对象#

C# 两类C中的引用对象#,c#,.net,class,reference,client,C#,.net,Class,Reference,Client,让我们直接讨论我可能相当简单的问题 我的Services文件夹中有一个LoginService类,它与服务器建立了连接。我还有另一个UserModel,我想从服务器接收信息。为了避免再次登录(这将是愚蠢的),我需要在两个具有相同值的文件中维护client引用。换句话说,我需要能够从不同的类访问相同的对象(进行另一个引用) 我试了又试,找了又找,但我遗漏了什么。 我发现的一个相当类似的帖子仍然没有解决我的问题 myLoginService中的代码: namespace App_Name.Servi

让我们直接讨论我可能相当简单的问题

我的
Services
文件夹中有一个
LoginService
类,它与服务器建立了连接。我还有另一个
UserModel
,我想从服务器接收信息。为了避免再次登录(这将是愚蠢的),我需要在两个具有相同值的文件中维护
client
引用。换句话说,我需要能够从不同的类访问相同的对象(进行另一个引用)

我试了又试,找了又找,但我遗漏了什么。 我发现的一个相当类似的帖子仍然没有解决我的问题

my
LoginService
中的代码:

namespace App_Name.Services
{
    class LoginService
    {
        public static Class_Name client;

        public async Task MakeConnectionAsync(string userToken)
        {
            client = new Class_Name();

            PasswordVault vault = new PasswordVault();

            await client.LoginAsync(TokenType.User, userToken);

            await client.StartAsync();
        }
现在我想在我的
UserModel.cs
上获取用户头像:

namespace App_Name.Models
{
    class UserModel
    {
        public string GetAvatar()
        {
            return LoginService.client.CurrentUser.GetAvatarUrl();
        }
但它总是给出一个异常,因为它尝试了,但没有连接。 我确信它已连接,因为要加载用户模型必须成功连接


有什么想法吗?

当您直接调用client.CurrentUser.GetAvatarUrl()方法时,它不是由LoginService类决定的。您应该在使用前创建登录类。此外,如果您在LoginService类上使用异步任务,则必须确认UserModel类已经创建了user

为了获得最佳实践,您可以像这样使用构造函数创建实例

  static class LoginService
    {
        public static Class_Name client;
        static LoginService()
        {
        client = new Class_Name();
        }
如果您想使用static(对于服务级别,我不喜欢使用static),那么就不要使用static。
首先,您应该检查依赖项注入概念;我建议使用unity和structuremap容器。您可以通过类创建消费服务,而无需任何对象null ref.异常。依赖注入减少了耦合和空引用异常。

Ehmmm,对于任何可以将其用作引用的人,我上面的代码都很好


问题在于连接API没有立即返回状态。2秒钟的延迟解决了我的问题。感谢大家的帮助。

idk如果这对您有用,但是您是否尝试过使用依赖项注入和接口?它可以解决您的问题,创建一个包含您的登录方法的接口,然后将此接口方法注入程序中的任何位置