国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) web前端 js教程 縮小差距:MAUI 混合行動(dòng)開(kāi)發(fā)

縮小差距:MAUI 混合行動(dòng)開(kāi)發(fā)

Oct 21, 2024 pm 10:51 PM

Bridging the Gap: MAUI Hybrid Mobile Development

在行動(dòng)應(yīng)用程式開(kāi)發(fā)的動(dòng)態(tài)世界中,尋找兼具效率、靈活性和穩(wěn)健性的正確工具是一項(xiàng)持續(xù)的任務(wù)。雖然程式設(shè)計(jì)中有許多可用的行動(dòng)框架,但當(dāng)專注於 JavaScript 框架和混合應(yīng)用程式時(shí),選擇會(huì)變得有限。開(kāi)發(fā)人員經(jīng)常尋求能夠讓他們無(wú)縫利用現(xiàn)代 JavaScript 框架以及本機(jī)功能的解決方案。

進(jìn)入 MAUI Hybridizer,這是一個(gè)功能強(qiáng)大的庫(kù),旨在將 JavaScript 應(yīng)用程式與 .NET MAUI 集成,使開(kāi)發(fā)人員能夠輕鬆創(chuàng)建動(dòng)態(tài)、跨平臺(tái)混合行動(dòng)應(yīng)用程式。

對(duì)增強(qiáng)型混合庫(kù)的需求

基於現(xiàn)有解決方案

使用 JavaScript 框架建立混合應(yīng)用程式有多種選擇。 Capacitor 和 NativeScript 等工具為混合行動(dòng)應(yīng)用程式開(kāi)發(fā)做出了重大貢獻(xiàn)。它們提供了有價(jià)值的功能並擁有自己的優(yōu)勢(shì):

  • Capacitor 提供廣泛的平臺(tái)支援和熟悉的基於 Web 的開(kāi)發(fā)方法。
  • NativeScript 允許開(kāi)發(fā)人員使用 JavaScript、TypeScript 或 Angular 來(lái)建立本機(jī)應(yīng)用程序,從而提供對(duì)本機(jī) API 的直接存取。

但是,開(kāi)發(fā)者可能會(huì)遇到以下的挑戰(zhàn):

  • 外掛程式開(kāi)發(fā)複雜性:Capacitor 外掛程式通常需要了解 Java 和 Swift 等本地語(yǔ)言,這對(duì)於那些主要從事 Web 開(kāi)發(fā)的人來(lái)說(shuō)可能是一個(gè)障礙。
  • 支援和維護(hù):NativeScript 雖然功能強(qiáng)大,但可能會(huì)缺乏積極的支援和更新,這可能會(huì)給開(kāi)發(fā)和維護(hù)生產(chǎn)就緒應(yīng)用程式帶來(lái)挑戰(zhàn)。

這些考慮因素強(qiáng)調(diào)了一個(gè)庫(kù)的機(jī)會(huì),它結(jié)合了現(xiàn)有解決方案的優(yōu)勢(shì),同時(shí)解決了它們的局限性,專門(mén)為JavaScript 框架和混合應(yīng)用程序提供了更簡(jiǎn)化和更易於訪問(wèn)的開(kāi)發(fā)體驗(yàn)。

MAUI 混合器簡(jiǎn)介

利用毛伊島豐富的遺產(chǎn)

.NET 多平臺(tái)應(yīng)用程式UI (MAUI) 建立在Xamarin 奠定的堅(jiān)實(shí)基礎(chǔ)之上,提供了一個(gè)統(tǒng)一的框架,用於跨多個(gè)平臺(tái)(包括Android、iOS、macOS 和Windows)創(chuàng)建本機(jī)應(yīng)用程式.這種豐富的背景意味著 MAUI 已經(jīng)實(shí)現(xiàn)了大量 API,無(wú)需特定於平臺(tái)的程式碼即可存取本機(jī)設(shè)備功能。

圖書(shū)館背後的邏輯

MAUI Hybridizer 可作為 JavaScript 應(yīng)用程式和 .NET MAUI 框架之間的橋樑。它支援 JavaScript 和 C# 層之間的雙向通信,允許開(kāi)發(fā)人員從 JavaScript 呼叫本機(jī) API,反之亦然。這是透過(guò)載入 JavaScript 應(yīng)用程式並促進(jìn)使用訊息系統(tǒng)進(jìn)行通訊的混合 Web 視圖來(lái)實(shí)現(xiàn)的。

無(wú)縫插件集成

MAUI Hybridizer 充分利用 MAUI 廣泛的 API 集,允許開(kāi)發(fā)人員將這些現(xiàn)有實(shí)作用作混合應(yīng)用程式中的插件。這不僅加速了開(kāi)發(fā),還確保應(yīng)用程式基於經(jīng)過(guò)驗(yàn)證的穩(wěn)定技術(shù)建置。

主要特點(diǎn)

  • 雙向通訊:從 JavaScript 無(wú)縫呼叫原生 C# 方法,並從 C# 呼叫 JavaScript 函數(shù)。
  • 外掛程式架構(gòu):輕鬆建立和整合自訂外掛程式以擴(kuò)展應(yīng)用程式的功能。
  • 事件處理:跨兩層觸發(fā)和處理應(yīng)用程式生命週期事件,例如恢復(fù)和停止。

建立外掛:逐步指南

MAUI Hybridizer 的突出功能之一是能夠創(chuàng)建自訂插件,使開(kāi)發(fā)人員能夠透過(guò)利用本機(jī)設(shè)備功能來(lái)擴(kuò)展應(yīng)用程式的功能。

第 1 步:建立 .NET MAUI 類別庫(kù)

首先,建立一個(gè)新的.NET MAUI 類別庫(kù)專案。確保您使用的是支援的 .NET 版本(小於 9,因?yàn)?Roslyn 分析器可能尚未完全支援 .NET 9)。

dotnet new mauiclasslib -n MyCustomPlugin -f net8.0

步驟 2:新增 AutoGen NuGet 套件

將Allowed.Maui.Hybridizer.AutoGen包加入您的專案中:

dotnet add package Allowed.Maui.Hybridizer.AutoGen

第 3 步:實(shí)作 C# 插件

建立您的插件類,使用屬性將其指定為插件,並將其方法指定為可從 JavaScript 呼叫。

using System.Text.Json.Serialization;
using Allowed.Maui.Hybridizer.Abstractions.Attributes;
using Allowed.Maui.Hybridizer.Abstractions.Plugins;

namespace MyCustomPlugin;

[HwvPlugin]
public class StoragePlugin
{
    [HwvMethod]
    public GetResponse Get([HwvPayload] GetRequest request)
    {
        return new GetResponse(Preferences.Default.Get(request.Key, string.Empty));
    }

    [HwvMethod]
    public void Set([HwvPayload] SetRequest request)
    {
        Preferences.Default.Set(request.Key, request.Value);
    }

    [HwvMethod]
    public void Remove([HwvPayload] RemoveRequest request)
    {
        Preferences.Default.Remove(request.Key);
    }

    public record GetRequest([property: JsonPropertyName("key")] string Key);

    public record GetResponse([property: JsonPropertyName("value")] string Value);

    public record SetRequest(
        [property: JsonPropertyName("key")] string Key,
        [property: JsonPropertyName("value")] string Value);

    public record RemoveRequest([property: JsonPropertyName("key")] string Key);
}

步驟 4:透過(guò)依賴注入註冊(cè)插件

實(shí)作外掛程式後,您需要將其註冊(cè)到 MAUI 依賴注入容器,以便 Maui Hybridizer 能夠識(shí)別它。

在您的 MauiProgram.cs 中,加入以下程式碼:

// Add the Hybridizer with plugin modules
builder.Services.AddHybridizer(
    Allowed.Maui.Hybridizer.Essentials.HwvPluginModule.Invoke, 
    MyCustomPlugin.HwvPluginModule.Invoke
);

// Add essentials plugins you need
builder.Services.RegisterAlertPlugin();
builder.Services.RegisterBatteryPlugin();
builder.Services.RegisterStoragePlugin();

// Add your custom plugin
builder.Services.AddTransient<CustomAlertPlugin>();

注意:HwvPluginModule 是在建立外掛程式時(shí)由Allowed.Maui.Hybridizer.AutoGen 套件所建立的自動(dòng)產(chǎn)生的類別。它包含註冊(cè)插件服務(wù)的方法。

步驟5:初始化橋接服務(wù)

此步驟設(shè)定通訊通道,應(yīng)在 JavaScript 應(yīng)用程式中完成一次,通常是在應(yīng)用程式載入後。

import { bridgeService } from "../hybridizer/BridgeService";

// Initialize the bridge service for communication
if (!platformService.isWeb())
    bridgeService.initialize();

第 6 步:建立 JavaScript 介面

在您的 JavaScript 應(yīng)用程式中,建立一個(gè)介面來(lái)與本機(jī)外掛程式進(jìn)行通訊。

dotnet new mauiclasslib -n MyCustomPlugin -f net8.0

解釋

  • 平臺(tái)檢查:確定應(yīng)用程式是在網(wǎng)路上運(yùn)作還是作為本機(jī)應(yīng)用程式運(yùn)作。
  • 方法:作為原生應(yīng)用程式運(yùn)行時(shí),使用bridgeService.invoke呼叫原生方法。
  • 用法:在 JavaScript 程式碼中匯入並使用 storagePlugin 來(lái)存取本機(jī)儲(chǔ)存功能。

從 C# 呼叫 JavaScript:處理事件

MAUI Hybridizer 也有助於從 C# 層呼叫 JavaScript 函數(shù),這對(duì)於處理復(fù)原和停止等應(yīng)用程式生命週期事件特別有用。

實(shí)施事件處理

在 App.xaml.cs 檔案中,設(shè)定應(yīng)用程式生命週期事件並使用 _jsCaller 呼叫 JavaScript 方法。

dotnet add package Allowed.Maui.Hybridizer.AutoGen

解釋

  • AppLifecycleService:處理應(yīng)用程式生命週期事件的自訂服務(wù)。
  • HwvJsCaller:注入以啟用從 C# 呼叫 JavaScript 函數(shù)。
  • 事件訂閱:當(dāng)應(yīng)用程式復(fù)原或停止時(shí),會(huì)呼叫對(duì)應(yīng)的 JavaScript 函數(shù) Resumed 或 Stopped。

JavaScript 端

在您的 JavaScript 應(yīng)用程式中,使用bridgeService.register 註冊(cè)事件處理程序。

using System.Text.Json.Serialization;
using Allowed.Maui.Hybridizer.Abstractions.Attributes;
using Allowed.Maui.Hybridizer.Abstractions.Plugins;

namespace MyCustomPlugin;

[HwvPlugin]
public class StoragePlugin
{
    [HwvMethod]
    public GetResponse Get([HwvPayload] GetRequest request)
    {
        return new GetResponse(Preferences.Default.Get(request.Key, string.Empty));
    }

    [HwvMethod]
    public void Set([HwvPayload] SetRequest request)
    {
        Preferences.Default.Set(request.Key, request.Value);
    }

    [HwvMethod]
    public void Remove([HwvPayload] RemoveRequest request)
    {
        Preferences.Default.Remove(request.Key);
    }

    public record GetRequest([property: JsonPropertyName("key")] string Key);

    public record GetResponse([property: JsonPropertyName("value")] string Value);

    public record SetRequest(
        [property: JsonPropertyName("key")] string Key,
        [property: JsonPropertyName("value")] string Value);

    public record RemoveRequest([property: JsonPropertyName("key")] string Key);
}

完整範(fàn)例

此實(shí)作的綜合範(fàn)例可以在 MAUI Hybridizer 儲(chǔ)存庫(kù)內(nèi)的範(fàn)例專案中找到。

結(jié)論

MAUI Hybridizer 建立在現(xiàn)有工具的優(yōu)勢(shì)之上,為混合行動(dòng)應(yīng)用程式開(kāi)發(fā)提供強(qiáng)大、靈活的解決方案。透過(guò)簡(jiǎn)化外掛程式開(kāi)發(fā)並促進(jìn) JavaScript 和本機(jī)程式碼之間的無(wú)縫通信,它為開(kāi)發(fā)人員提供了一個(gè)可訪問(wèn)且高效的工具來(lái)創(chuàng)建高品質(zhì)的跨平臺(tái)應(yīng)用程式。

個(gè)人意見(jiàn)

作為一個(gè)熟悉混合行動(dòng)應(yīng)用程式開(kāi)發(fā)複雜性的開(kāi)發(fā)人員,我發(fā)現(xiàn) MAUI Hybridizer 有效地利用了 MAUI 豐富的 API 遺產(chǎn),同時(shí)為 JavaScript 整合提供了直覺(jué)的介面。它透過(guò)提供一種替代方案來(lái)補(bǔ)充現(xiàn)有的解決方案,該替代方案可能更適合尋求與 .NET MAUI 更緊密整合和更簡(jiǎn)單的插件開(kāi)發(fā)流程的開(kāi)發(fā)人員。

現(xiàn)狀及未來(lái)計(jì)劃

MAUI Hybridizer 目前處?kù)稖y(cè)試階段,為開(kāi)發(fā)人員提供了探索其特性和功能的機(jī)會(huì)。隨著 .NET 9 的發(fā)布,該程式庫(kù)計(jì)劃退出 Beta 階段,並附帶 MAUI Hybridizer Essentials 套件中的一組必備插件,這些插件將覆蓋核心原生功能並進(jìn)一步增強(qiáng)開(kāi)發(fā)體驗(yàn)。

入門(mén)

要探索 Maui Hybridizer 並查看其實(shí)際情況,請(qǐng)?jiān)煸L GitHub 儲(chǔ)存庫(kù)並查看範(fàn)例專案。無(wú)論您是建立新應(yīng)用程式還是希望增強(qiáng)現(xiàn)有應(yīng)用程序,該程式庫(kù)都為混合行動(dòng)開(kāi)發(fā)提供了一條充滿希望??的前進(jìn)道路。

以上是縮小差距:MAUI 混合行動(dòng)開(kāi)發(fā)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用於不同的應(yīng)用場(chǎng)景。 Java用於大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用於網(wǎng)頁(yè)開(kāi)發(fā)。

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助於精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大??? 如何減少JavaScript應(yīng)用程序的有效載荷大小? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問(wèn)題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過(guò)React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫(kù)支持該特性;3.壓縮和合併資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合併文件並優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫(kù)如day.js、fetch

JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS JavaScript模塊上的確定JS綜述:ES模塊與COMPORJS Jul 02, 2025 am 01:28 AM

ES模塊和CommonJS的主要區(qū)別在於加載方式和使用場(chǎng)景。 1.CommonJS是同步加載,適用於Node.js服務(wù)器端環(huán)境;2.ES模塊是異步加載,適用於瀏覽器等網(wǎng)絡(luò)環(huán)境;3.語(yǔ)法上,ES模塊使用import/export,且必須位於頂層作用域,而CommonJS使用require/module.exports,可在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用;4.CommonJS廣泛用於舊版Node.js及依賴它的庫(kù)如Express,ES模塊則適用於現(xiàn)代前端框架和Node.jsv14 ;5.雖然可混合使用,但容易引發(fā)問(wèn)題

See all articles