MAUI 跨平台播客应用程序(Conf 2021)

介绍

在.NET Conf 2021大会上,微软展示了基于.NET6 跨平台应用程序, 具有ASP.NET Core、Blazor、.NET MAUI、微服务等功能。
浏览由 ASP.NET Core 和 Blazor 提供支持的 .NET Podcasts 应用的实时运行版本:https://dotnetpodcasts.azurewebsites.net/
5043d168f1df59593a876c0c5419e225.png

项目体系

  • 移动端和桌面:适用于 iOS、Android、macOS 和 Windows 的原生 .NET MAUI 应用程序

  • Web:Blazor WebAssembly应用程序和 ASP.NET Core Blazor 网站

  • API:ASP.NET Core Web API 、injestion worker 和 podcast update worker

  • Blazor 混合应用程序:.NET MAUI 与 Blazor 的混合应用程序示例。
    0a752a2dd7033ae3c24cbe5278556dc4.png

MAUI项目

单个代码库的跨平台项目解决方案, 适用于Android、iOS、macOS以及Windows 的原生.NET应用程序, 解决方案如下:
5afa31d3978ed6ae28a849c77b361f2e.png

特征介绍

  • Global Usings
    全局引用, 只需要在任何using 语句之前添加Global关键字, 即可使该引用成为全局

global using Microsoft.Maui;
  • 内置主题
    通过UserAppTheme修改基于不同平台的主题设置, Light/Dark

switch (Settings.Theme){default:case OSAppTheme.Light:App.Current.UserAppTheme = OSAppTheme.Light;break;case OSAppTheme.Dark:App.Current.UserAppTheme = OSAppTheme.Dark;break; }
  • 消息中心
    使用过类似mvvmlight中的Messenger类似, 可以通过Subscribe/Send/Unsubscribe 来完成订阅、发布、取消订阅等功能。

//订阅
MessagingCenter.Instance.Subscribe<string>("","",async (sender) =>{//...});//取消订阅
MessagingCenter.Instance.Unsubscribe<string>("", "");//发布
MessagingCenter.Instance.Send<string>("", "");
  • 内置容器
    MAUI中提供的统一注册以及容器服务, 通过 MauiAppBuilder 添加自定服务以及通过 MauiWinUIApplication获取对应服务。

//注册服务
public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
{builder.Services.TryAddSingleton<PlayerService>();
}//调用平台的容器服务
public static class ServicesProvider{public static TService GetService<TService>()=> Current.GetService<TService>();public static IServiceProvider Current=>
#if WINDOWS10_0_17763_0_OR_GREATERMauiWinUIApplication.Current.Services;
#elif ANDROIDMauiApplication.Current.Services;
#elif IOS || MACCATALYSTMauiUIApplicationDelegate.Current.Services;
#elsenull;
#endif}

统一资源管理

MAUI中统一了资源的管理以及访问,例如: 字体、图标、样式、本地资源文件等。
385a153f3e5b713d1d41ec585207cd05.png

访问字体

<Setter Property="FontFamily"  Value="SegoeUiSemibold" />

访问图片资源

<Image Source="xxx.png"  />

本地化资源

xmlns:res="clr-namespace:Microsoft.NetConf2021.Maui.Resources.Strings"<Label Text="{x:Static res:AppResource.Categories}"  />

平台化

在XAML以及代码中, 你可以通过平台化处理不同的UI以及业务逻辑, 可以通过OnPlatform以及OnIdiom来区分平台及类型。

不同平台下的字体设置

<Label  FontSize="{OnPlatform UWP=24, macOS=24, Android=14,iOS=14}"  />

不同设备的设置

<GridItemsLayout  Span="{OnIdiom Phone=2, Tablet=3, Desktop=3}"  />

Essentials

内置的Essentials提供访问本机网络WIFI、蓝牙等等。

//验证是否联网var current = Connectivity.NetworkAccess; if (current != NetworkAccess.Internet){ //...}//验证是否存在WIFI连接var profiles = Connectivity.ConnectionProfiles;var hasWifi = profiles.Contains(ConnectionProfile.WiFi);if (hasWifi){//...}

混合模式

在XAML当中, 使用BlazorWebView

xmlns:b="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui"<b:BlazorWebView x:Name="MyWebView"Margin="10,0"HostPage="wwwroot/index.html"BackgroundColor="{AppThemeBinding Light={StaticResource Grey1}, Dark={StaticResource Grey9}}"><b:BlazorWebView.RootComponents><b:RootComponent Selector="app"ComponentType="{x:Type pages:ListenTogetherComponent}" /></b:BlazorWebView.RootComponents></b:BlazorWebView>

总结

项目已在Github发布, https://github.com/microsoft/dotnet-podcasts, 更多特性探索源代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql enum_MySQL数据库中关于ENUM类型的详细解释

MySQL数据库中&#xff0c;因为工作的需求&#xff0c;我们可能会用到ENUM类型&#xff0c;但是由于此类型不是很常用&#xff0c;我们可能对其也不是很了解。没关系&#xff0c;本文我们就对ENUM类型做一些详细的解释&#xff0c;希望能够对您有所帮助。ENUM类型是一个字符串对…

Linux系统新手学习的11点建议

随着Linux应用的扩展许多朋友开始接触Linux&#xff0c;根据学习Windwos的经验往往有一些茫然的感觉&#xff1a;不知从何处开始学起。这里介绍学习Linux的一些建议。 一、从基础开始&#xff1a;常常有些朋友在Linux论坛问一些问题&#xff0c;不过&#xff0c;其中大多数的问…

Android之如何实现通讯录的搜索并且让匹配到的数据变颜色

不废话,先爆照 第一步:实现搜索 已经实现了通讯录功能,但是需要搜索,可以支持中文名字搜索,写入电话号码搜索,还有名字拼音,以及名字第一个字的首字母来搜索,这里介绍名字搜索,然后数据是我们公司TCL(020)所有员工的信息,目前还没有写到后…

复习一下日志等级类型

linux操作系统的日志有多种信息等级类型&#xff0c;今天好好复习一下&#xff1a; 1、info&#xff1a;信息说明&#xff1b; 2、notice&#xff1a;较info更需注意的信息&#xff1b; 3、warning&#xff08;warn&#xff09;&#xff1a;和现实生活中的warning不同&#xff…

mysql映射超_Hibernate的映射类型 hibernate mysql映射类型

(转)http://blog.csdn.net/zxy_snow/article/details/7214222Hibernate的映射类型 hibernate mysql映射类型1、Hibernate的映射类型 hibernate mysql映射类型Hibernate 映射类型Java 类型标准 SQL 类型大小和取值范围integer 或者 intint 或者 java.lang.IntegerINTEGER4 字节l…

dotnet 将自动代码格式化机器人带入团队 GitLab 平台

给团队带入一个 代码格式化机器人 能提升团队的幸福度&#xff0c;让团队的成员安心写代码&#xff0c;不用关注代码格式化问题&#xff0c;将格式代码这个粗活交给机器人去做。同时也能减少在代码审查里撕格式化问题的时间&#xff0c;让更多的时间投入到更有价值的工作上本文…

Notion,我来,语雀,有道等几个云笔记

最近打算放弃wolai产品的使用&#xff0c;所以有必要总结一下这些年用过的那些笔记。从最早开始用Evernote&#xff0c;然后麦库&#xff0c;为知&#xff0c;然后有道&#xff0c;onenote&#xff0c;一直到Notion&#xff0c;我来&#xff0c;语雀等等&#xff0c;都有各自的…

玩转Javascript 给JS写测试

给js写测试已经不是什么稀奇的事情了&#xff0c;最近项目里用了jasmine和JsTestDriver两种js测试框架。JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD风格的开发。当在项目中配置好JsTestDriver以后&#xff0c;如同junit测试java文件一般&am…

Android 之自定义view实现水波纹效果

在实际的开发中&#xff0c;很多时候还会遇到相对比较复杂的需求&#xff0c;比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果&#xff0c;兴致高昂的来找你&#xff0c;看了之后目的很明确&#xff0c;当然就是希望你能给她&#xff1b; 在这样的关键时候&#xff0c;身子板就一…

FFLIb Demo CQRS

使用FFLIB 构建了一个demo&#xff0c;该demo模拟了一个常见的游戏后台架构&#xff0c;该demo主要有一下亮点&#xff1a; FFLIB 实现进程间通信非常方便基于CQRS 思想构建LogicServer使用Event Publish/Subscribe&#xff0c; 实现各个模块的解耦合基于Event 实现实体对象的单…

【自定义标签开发】01-标签简介和开发第一个标签

自定义标签简介自定义标签主要用于移除Jsp页面中的java代码。要使用自定义标签移除jsp页面中的java代码&#xff0c;只需要完成以下两个步骤:1.编写一个实现Tag接口的java类&#xff0c;把页面java代码移到这个java类中(标签处理器类)。2.编写标签库描述(tld)文件&#xff0c;在…

三联《少年》创刊,各领域佼佼者畅言新知,帮少年建立思维素养体系!

▲点击查看很多中国小孩的成长是断层的。10岁前被视作可爱稚子&#xff0c;被大人护着走&#xff1b;18岁猛然被定义为成年人&#xff0c;要选择大学、专业&#xff0c;开始面对感情。中间的人生呢&#xff1f;“你是个学生&#xff0c;学习是本职&#xff0c;现在谈什么人生&a…

mysql utf8 bin设置_[mysql]修改collation为utf8_bin

mysql默认字段值区分大小写&#xff1a;character-set-serverutf8collation-serverutf8_bininit-connectSET NAMES utf8;SELECT DEFAULT_CHARACTER_SET_NAME charset, DEFAULT_COLLATION_NAME collationFROM information_schema.SCHEMATA WHERE SCHEMA_NAME billing01;SELECT …

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

01—自定义引导程序在上一部分中&#xff0c;我们讨论了Caliburn.Micro WPF应用程序的最基本配置&#xff0c;并演示了与操作和约定相关的两个简单功能。在这一部分中&#xff0c;我想进一步探讨Bootstrapper类。让我们首先将应用程序配置为使用IoC容器。本例中我们将使用内置容…

Android 使用XmlPullParser解析xml

这里我们假设要解析的xml文件名为&#xff1a;test.xml&#xff0c;我们将其放在assets路径中。 xml文件内容为&#xff1a; <?xml version1.0 encodingutf-8 standaloneyes ?> <books><book id"1"><name>Java编程思想</name><pr…

链表之打印两个有序链表的公共部分

题目:打印两个有序链表的公共部分 package com.chenyu.zuo.linkedList; /*** 打印有序链表的公共部分* @author 陈喻*题目:给定两个有序链表的头指针head1和head2,打印出两个链表的公共部分*思路:因为有序*如果head1的值小于head2,则head1往下移动*如果head2的值小于head1,…

批处理for命令详解

批处理for命令详解批处理for命令详解 2008-03-07 11:00 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号) FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数…

趁爸妈不在家约男朋友回家吃饭,然而......

1 有没有男主很脆弱的电影&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 成长期-成熟期-完全体-究极体▼3 千万别在家乱放星巴克的袋子&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 发生了很奇怪的事情▼5 只有你想不到&#xff0c;没…

java泛型不是计算运行时的数据类型

2019独角兽企业重金招聘Python工程师标准>>> package com.ada.data.entity;import java.io.Serializable;import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuper…

spark 连接mysql 命令_spark-submit命令包括mysql连接器

我有一个scala对象文件&#xff0c;它在内部查询mysql表做一个连接并将数据写入s3&#xff0c;在本地测试我的代码它运行得很好 . 但是当我将它提交到集群时&#xff0c;它会抛出以下错误&#xff1a;线程“main”java.sql.SQLException中的异常&#xff1a;在org.apache.spark…