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):
IMessage
是 shared project
MileageManagerForms 中的一个 public 界面:
namespace MileageManagerForms
{
public interface IMessage
{
}
}
属性 [assembly: Dependency(typeof(MileageManagerForms.Droid.MessageService))]
的用途是什么?
尝试将其注释掉。
是否有您从其他地方获得的 IMessage
或 MessageService
的定义?也许是您使用的图书馆?
尝试以下完整性检查:
在 OnCreate
中,在 Xamarin Forms Init 之后,放置以下 3 行:
IMessage ms = new MessageService();
Xamarin.Forms.DependencyService.Register<IMessage, MessageService>();
var messageService = Xamarin.Forms.DependencyService.Resolve<IMessage>();
- 如果第一行抱怨,那么你没有按照你认为的那样去做。将鼠标悬停在
IMessage
和 MessageService
上,查看它们所在的命名空间。
- 目前二线正在为您投诉。如果第一行没有抱怨地编译和运行,我还没有找到任何方法让第二行给出你得到的错误。 (我可以通过在 XF 初始化之前执行它来导致其他错误,比如 null 异常)。
- 如果第三行导致
messageService
具有 null
值(将鼠标悬停在它上面,或检查 Locals),则还有其他问题,待定。
我已经阅读了我能找到的所有内容并尝试了所有这些内容,但无法通过此空引用异常。这是我失败的代码
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):
IMessage
是shared project
MileageManagerForms 中的一个 public 界面:
namespace MileageManagerForms
{
public interface IMessage
{
}
}
属性
[assembly: Dependency(typeof(MileageManagerForms.Droid.MessageService))]
的用途是什么?
尝试将其注释掉。是否有您从其他地方获得的
IMessage
或MessageService
的定义?也许是您使用的图书馆?
尝试以下完整性检查:
在 OnCreate
中,在 Xamarin Forms Init 之后,放置以下 3 行:
IMessage ms = new MessageService();
Xamarin.Forms.DependencyService.Register<IMessage, MessageService>();
var messageService = Xamarin.Forms.DependencyService.Resolve<IMessage>();
- 如果第一行抱怨,那么你没有按照你认为的那样去做。将鼠标悬停在
IMessage
和MessageService
上,查看它们所在的命名空间。 - 目前二线正在为您投诉。如果第一行没有抱怨地编译和运行,我还没有找到任何方法让第二行给出你得到的错误。 (我可以通过在 XF 初始化之前执行它来导致其他错误,比如 null 异常)。
- 如果第三行导致
messageService
具有null
值(将鼠标悬停在它上面,或检查 Locals),则还有其他问题,待定。