您现在的位置是:首页 >学无止境 >C# MAUI 注册服务网站首页学无止境

C# MAUI 注册服务

Rotion_深 2025-03-26 00:01:02
简介C# MAUI 注册服务

MAUI 支持多个平台,如Android 、IOS、MAC等

有些数据的获取,每个平台都不一样,如果想在公共代码中,能根据平台的不同,调用相同的接口去实现数据获取,可以按下面介绍的方式进行设计

示例:获取当前的IP地址

定义 接口 ILocalIPAddress

   public interface ILocalIPAddress
   {
       /// <summary>
       /// 获取本地IP
       /// </summary>
       /// <param name="ip"></param>
       /// <returns></returns>
       BaseResult GetLocalIPAddress(out string ip, out string gateway);
       /// <summary>
       /// 获取程序路径
       /// </summary>
       /// <returns></returns>
       string GetBaseDirectory();
   }

在相应的平台下边,实现接口

下面介绍Android端的实现

[assembly: Dependency(typeof(LocalIPAddress))]
namespace LS.GRPCAPP.Platforms.Android.lmpl
{
    public class LocalIPAddress : ILocalIPAddress
    {
        public string GetBaseDirectory()
        {
            return System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);
        }

        /// <summary>
        /// 获取本地IP
        /// </summary>
        /// <param name="ip"></param>
        /// <returns></returns>
        public BaseResult GetLocalIPAddress(out string ip,out string gateway)
        {
            ip = "";
            gateway = "";
            try
            {
                // 获取 WifiManager
                WifiManager wifiManager = (WifiManager)LS.GRPCAPP.MainApplication.Context.GetSystemService(Context.WifiService);

                // 检查WiFi是否启用
                if (wifiManager != null && wifiManager.IsWifiEnabled)
                {
                    // 获取当前连接的WiFi信息
                    WifiInfo wifiInfo = wifiManager.ConnectionInfo;
                    var dhcpInfo = wifiManager.DhcpInfo;

                    // 获取WiFi名称和IP地址
                    string ipAddress = Formatter.FormatIpAddress(wifiInfo.IpAddress);
                    string _gateway = Formatter.FormatIpAddress(dhcpInfo.Gateway);

                    ip = ipAddress;
                    gateway = _gateway;
                    return BaseResult.Successed;
                }
                else
                {
                    return new BaseResult(false, "WiFi is not enabled.");
                }
            }
            catch (Exception ex)
            {
                return new BaseResult(false, "Error: " + ex.Message);
            }
        }
    }
}

然后再启动程序中,按平台分类进行注册服务

            // 根据平台注册服务
#if ANDROID
        builder.Services.AddSingleton<ILocalIPAddress, Platforms.Android.lmpl.LocalIPAddress>();
#elif IOS
        //builder.Services.AddSingleton<ILocalIPAddress, iOSLocalIPAddressService>();
#elif MACCATALYST
        //builder.Services.AddSingleton<ILocalIPAddress, MacLocalIPAddressService>();
#elif WINDOWS
        //builder.Services.AddSingleton<ILocalIPAddress, WindowsLocalIPAddressService>();
#endif

在APP中,启动时注入服务

 public App()
 {
     InitializeComponent();

     MainPage = new AppShell();
     try
     {
         // 初始化依赖注入
         AppPath.Initialize(IPlatformApplication.Current.Services);
         GlobalData.Initialize(IPlatformApplication.Current.Services);
         LogOperate.InitLog(System.Threading.Thread.CurrentThread.ManagedThreadId, AppPath.Path_Logs_AppLog);
     }
     catch (Exception ex)
     {

     }
 }

使用全局类  

 public static class GlobalData
 {
     private static ILocalIPAddress _localIPAddress;

     // 在应用启动时注入服务
     public static void Initialize(IServiceProvider services)
     {
         _localIPAddress = services.GetRequiredService<ILocalIPAddress>();
     }

     /// <summary>
     /// 获取实现接口ILocalIPAddress 的对象
     /// </summary>
     /// <returns></returns>
     public static ILocalIPAddress GetLocalIPAddress()
     {
         return _localIPAddress;
     }
 }

调用方式:

            var res = GlobalData.GetLocalIPAddress().GetLocalIPAddress(out var ip, out string gateway);
            Url = $"http://{gateway}:5237"; //"http://127.0.0.1:5237";
            Service = "Device";
            Method = "GetDeviceInfo";

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。