找不到类型为ClassName的默认构造函数。请提供缺少的构造函数

时间:2018-10-30 00:32:18

标签: c# xamarin.android

我尝试将Firebase身份验证管理到一个自定义类中,有关身份验证的所有工作都将完成。首先,我尝试通过调用

在MainActivity.cs中创建此实例。
AuthService.GetInstance(); 

但是它在运行时因以下错误而崩溃:

  

无法找到类型AuthService的默认构造函数。请提供缺少的构造函数。

这是我的类AuthService,我试图初始化我的单身人士。这个构造函数有什么问题?这是因为我的类继承了Java.Lang.Object和singleton不能像以前那样工作吗?

public class AuthService : Java.Lang.Object, 
                            IOnSuccessListener, 
                            IOnFailureListener
{
    public User CurrentUser;
    private FirebaseAuth firebaseAuth;

    private static AuthService _instance = null;
    private static System.Object _mutex = new object();

    public IntPtr Handle {get;}

    public static AuthService GetInstance()
    {
        if (_instance == null)
        {
            lock (_mutex) // now I can claim some form of thread safety...
            {
                if (_instance == null)
                {
                    _instance = new AuthService();
                }
            }
        }
        return _instance;
    }

    private AuthService()
    {
       Initialise();
    }

    private void Initialise()
    {
        this.firebaseAuth = FirebaseAuth.Instance;

        if (FirebaseAuth.Instance.CurrentUser != null)
        {
            this.CurrentUser = User.GetInstance();
        }
    }
   }
  }

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您的默认构造函数private(有点奇怪),将其设为public

public AuthService()
{
   ...

Private Constructors (C# Programming Guide)

  

私有构造函数是特殊的实例构造函数。它是   通常用于仅包含静态成员的类。 如果上课   有一个或多个私有构造函数,没有公共构造函数,其他   类(嵌套类除外)无法创建此类的实例

答案 1 :(得分:1)

要正确实现单例模式,必须避免将构造函数公开。因此,应避免使用Java.Lang.Object,它似乎迫使您拥有公共构造函数。