我尝试在 .NET MAUI 中使用 Xamarin 中的相同代码。在我的 Xamarin Forms 项目中,我有以下代码:
private static readonly string serial = Serial();
private static string Serial()
{
string getnewSerial = DependencyService.Get<iSerial>().GetSerial();
return getnewSerial;
}
我有这个界面:
{
public interface iSerial
{
string GetSerial();
}
}
在 Android 上:
class Serial : iSerial
{
public string GetSerial()
{
string getserial = Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
return getserial;
}
}
和 iOS:
public class Serial : iSerial
{
public string GetSerial()
{
string getserial = Convert.ToString(UIDevice.CurrentDevice.IdentifierForVendor);
return getserial;
}
}
但是对于 .NET MAUI 它不起作用。
我已经在 MauiProgram.cs 中注册了它:
builder.Services.AddSingleton<ISerial, Serial>();
但是当我尝试像这样使用它时:
private static readonly string serial = Serial();
private static string Serial()
{
string getnewSerial = DependencyService.Get<iSerial>().GetSerial();
return getnewSerial;
}
我收到错误。有什么想法可以解决这个问题吗?
如果您的接口名称是 ISerial 那么您应该在使用它时使用相同的名称。
您使用解析器时出现拼写错误。
它应该是 string getnewSerial = DependencyService.Get<ISerial>().GetSerial(); 代替 字符串 getnewSerial = DependencyService.Get<iSerial>().GetSerial();
首先,您使用xamarin.form中的依赖服务来调用平台natvie代码。但在 maui 中,依赖服务可以替换为条件编译或部分类。
string getserial;
#if Android
getserial = Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
#elif IOS
getserial = Convert.ToString(UIDevice.CurrentDevice.IdentifierForVendor);
#endif
关于Partial类的使用方法,可以参考maui中调用平台代码的官方文档