我试图了解如何在 .NET MAUI 应用程序中实现依赖注入。
我有一个服务类及其接口,用于处理我的 REST 调用,如下所示:
public class MyRestApiService : IMyRestApiService
{
public async Task<string> Get()
{
// Do someting
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将其放入我的 DI 容器中MauiProgram.cs
:
builder.Service.AddTransient<IMyRestApiService, MyRestApiService>();
Run Code Online (Sandbox Code Playgroud)
我还有一个将用于我的MainPage.xaml
. 问题是,如果我对服务进行构造函数注入,XAML 似乎不喜欢它。
看起来MainPageViewModel
像这样:
public class MainPageViewModel : BaseViewModel
{
IMyRestApiService _apiService;
public MainPageViewModel(IMyRestApiService apiService)
{
_apiService = apiService;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试定义如下MainPageViewModel
视图模型时MainPage.xaml
,出现错误:
<ContentPage.BindingContext>
<vm:MainPageViewModel />
</ContentPage.BindingContext>
Run Code Online (Sandbox Code Playgroud)
错误如下:
MainPageViewModel 类型不能用作对象元素,因为它不是公共的,或者没有定义公共无参数构造函数或类型转换器。
如何将我的服务注入到我的视图模型中?
.NET MAUI 提供了一个 FilePicker 来显示本机对话框,您可以在其中从设备中选取文件。
有没有办法显示保存文件的对话框?(您可以在其中选择路径并输入文件名,...)。
我在 .NET MAUI 文档中没有找到任何内容,并阅读了此StackOverflow 问题来实现FolderPicker,但这并不完全是我所需要的。
我发现此链接中似乎有用的内容:
Xamarin Forms 中的键盘禁用了 Entry 控件
但它似乎只适用于 Xamarin Forms。我什至在我的 MAUI 应用程序中使用了它,但它根本没有效果!
我希望这样做的原因是因为我想启用编辑器字段的焦点,但不触发软键盘(对于条形码扫描仪字段)
谢谢。
有没有办法像 Xamarin 一样绑定本机库?我尝试在新的 .NET Maui 中进行一些本机实现,但尚未取得成功。如果有人有一些相关信息,我将非常感激。
我是 MAUI 新手,具有 Xamarin.Forms 的基本知识
我想向 MAUI 中的 Entry 控件添加底部边框(和边框刻度)。
在 Xamarin.Forms 上,我们必须创建一个自定义控件,然后为每个平台创建一个渲染器。
在发布此消息之前,我在互联网上进行了研究。它涉及处理程序,我的印象是它只允许基本修改(更改背景颜色等......)。
我对所有这些信息有点困惑,如果有人能启发我,我将不胜感激。
我计划创建一个跨平台应用程序。最小支持的平台应该是 android 和 windows。我希望最终得到一个经典的 Windows 可执行文件,而不是 UWP 应用程序。新的毛伊岛平台看起来很合适。
我已经下载了 Visual Studio 2022 的当前预发行版本并创建了一个新的 maui 项目。当我在 Windows 上编译并运行它时,Visual Studio 创建的应用程序是一个 UWP 应用程序。毛伊岛的微软官方页面指出:
.NET 多平台应用程序 UI (.NET MAUI) 应用程序可以为以下平台编写:
Android 5.0 (API 21) 或更高版本。iOS 10 或更高版本。macOS 10.13 或更高版本,使用 Mac Catalyst。Windows 11 和 Windows 10 版本 1809 或更高版本,使用 Windows UI 库 (WinUI) 3。
https://learn.microsoft.com/en-us/dotnet/maui/supported-platforms
github 上的以下问题看起来也可以创建 widnows 可执行文件:
发布到 exe(不是独立的)可以工作,但不要获取已发布的文件夹文件,而是获取构建工件,请参阅下面的项目符号 3 了解所有详细信息
https://github.com/dotnet/maui/issues/4329
我对 Windows 支持的细节有点困惑。是否只有 Windows 可以创建 UWP 应用程序,或者我可以将其编译为普通的桌面应用程序吗?我可以将输出更改为普通的 Windows 可执行文件吗?如果可以,怎么办?
我很清楚 .NET MAUI 只是 Xamarin.Forms 的下一代实现,因此大多数 Xamarin.Forms 指南应该适用于 .NET MAUI(我猜)。
有人让 Admob 在 .NET MAUI 中工作吗?如果是的话,如何实现?我只需要指明正确的方向,我就会上路
我完成了 .NET MAUI 应用程序的编码,并且在调试模式下一切正常。尽管我在 .NET MAUI 上使用它,但 Xamarin 的 Entity Framework Core 满足了我所有的数据持久性需求。
我已经制作了 apk 文件并对其进行测试以查看是否一切正常,但结果发现数据库并未创建。一旦我尝试执行数据库操作,我的应用程序就会崩溃。所以我不确定 EF Core 与 .NET MAUI 是否不兼容(但它在调试中运行良好),或者我错过了一些东西。
我按照此处访问的教程进行操作https://learn.microsoft.com/en-us/ef/core/get-started/xamarin下面是我的 DataContext 文件
数据上下文.cs
using Microsoft.EntityFrameworkCore;
using MedbaseRec.Models;
namespace MedbaseRec.Utils
{
public class DataContext : DbContext
{
public DbSet<QuestionPack> QuestionPacks { get; set; }
public DbSet<Question> Questions { get; set; }
public DataContext()
{
SQLitePCL.Batteries_V2.Init();
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "medbaseapplica.db3");
optionsBuilder.UseSqlite($"Filename={dbPath}");
}
}
}
Run Code Online (Sandbox Code Playgroud) db = new SQLiteConnection(databasePath);
上面的语句在 Windows 上运行良好,但在 Android 上出现以下错误。它在两个平台上以 xamarin 形式也运行良好。
System.IO.FileNotFoundException:“无法加载文件或程序集 'SQLitePCLRaw.provider.dynamic_cdecl,Version=2.0.4.976,Culture=neutral,PublicKeyToken=b68184102cba0b3b' 或其依赖项之一。”
谢谢你的帮助。
将我的视图绑定到视图模型时发生。
错误描述:
System.MissingMethodException: 'No parameterless constructor defined for type 'yournamespace.view.pagename'.'
Run Code Online (Sandbox Code Playgroud)