DependencyService.Get<IMessage>() 总是 returns null 或者说我没有根据参数定义默认构造函数

DependencyService.Get<IMessage>() always returns null or says I don't have a default constructor defined depending on params

我已经阅读了我能找到的所有内容并尝试了所有这些内容,但无法通过此空引用异常。这是我失败的代码

 try
        {
            Analytics.TrackEvent("In iCloud.aspx.cs, BackUpClicked Date = " + sDate.Date + " autoId = " + Convert.ToInt32(Application.Current.Properties["autoId"]));
            var count = await DependencyService.Get<IMessage>().BackupToiCloud(Convert.ToInt32(Application.Current.Properties["autoId"]), sDate.Date.ToString("MMddyyyy"));
            EntMessage = count.ToString() + " Records Backed Up";
        }
        catch (Exception ex)
        {
            Crashes.TrackError(ex);
            Analytics.TrackEvent("Exception in BackUpClicked Method" + ex.ToString());
        }

我读到我需要为我的解决方案中的两个平台实现依赖服务,所以我在下面的 AppDelegete.cs 中为 iOS 和 Android 添加了以下行,我的 MainActivity.cs

中有相同的行
Xamarin.Forms.DependencyService.Register<MessageService>();

在我的 iOS 项目中,我将 MessageService 定义如下,

[assembly: Dependency(typeof(MileageManagerForms.iOS.MessageService))]
namespace MileageManagerForms.iOS
{
    public class MessageService : IMessage

对于 android 项目,我将 MessageService 定义如下,

[assembly: Dependency(typeof(MileageManagerForms.Droid.MessageService))]
namespace MileageManagerForms.Droid
{
    public class MessageService : IMessage

我不太清楚我还需要做什么。我发现的一件事是提升此语法以进行注册,但是当我这样做时,它告诉我我缺少来自 MessageService 的默认构造函数,这是伪造的。

 Xamarin.Forms.DependencyService.Register<IMessage, MessageService>();

查看代码示例,似乎依赖服务的注册必须在appDelegate和MainActivity中的这一行代码下进行,

LoadApplication(new App());

这是正确的吗?我知道有上千篇专门针对这个主题的帖子,但如果您能看到我做错了什么,我将不胜感激。非常感谢。

验证这些详细信息(Android):

  1. IMessageshared project MileageManagerForms 中的一个 public 界面:
namespace MileageManagerForms
{
    public interface IMessage
    {
    }
}
  1. 属性 [assembly: Dependency(typeof(MileageManagerForms.Droid.MessageService))] 的用途是什么?
    尝试将其注释掉。

  2. 是否有您从其他地方获得的 IMessageMessageService 的定义?也许是您使用的图书馆?

尝试以下完整性检查:

OnCreate 中,在 Xamarin Forms Init 之后,放置以下 3 行:

IMessage ms = new MessageService();
Xamarin.Forms.DependencyService.Register<IMessage, MessageService>();
var messageService = Xamarin.Forms.DependencyService.Resolve<IMessage>();   
  • 如果第一行抱怨,那么你没有按照你认为的那样去做。将鼠标悬停在 IMessageMessageService 上,查看它们所在的命名空间。
  • 目前二线正在为您投诉。如果第一行没有抱怨地编译和运行,我还没有找到任何方法让第二行给出你得到的错误。 (我可以通过在 XF 初始化之前执行它来导致其他错误,比如 null 异常)。
  • 如果第三行导致 messageService 具有 null 值(将鼠标悬停在它上面,或检查 Locals),则还有其他问题,待定。