MAUI 中的依赖注入(Android 和 iOS)

问题描述 投票:0回答:2

我尝试在 .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;
}

我收到错误。有什么想法可以解决这个问题吗?

.net xamarin.forms dependency-injection maui
2个回答
0
投票

如果您的接口名称是 ISerial 那么您应该在使用它时使用相同的名称。

您使用解析器时出现拼写错误。

它应该是 string getnewSerial = DependencyService.Get<ISerial>().GetSerial(); 代替 字符串 getnewSerial = DependencyService.Get<iSerial>().GetSerial();


0
投票

首先,您使用xamarin.form中的依赖服务来调用平台natvie代码。但在 maui 中,依赖服务可以替换为条件编译或部分类。

  1. 使用条件编译:将以下代码放入共享项目中:
    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中调用平台代码的官方文档

© www.soinside.com 2019 - 2024. All rights reserved.