我正在try 为依赖项注入注册一个类,但是当我试图通过我的构造函数注入它时,我得到了以下错误:

System.MissingMethodException:‘没有为类型’MauiClient.MainPage‘定义无参数构造函数.’

我在主程序文件中注册服务,如下所示:

MainProgram.cs:

using Accounting.Shared.Services;
using Microsoft.Extensions.Logging;

namespace MauiClient
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();

            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });

            builder.Services.AddTransient<ITestService>(s =>
            {
                var httpClient = new HttpClient();
                var token = "";
                return new TestService(httpClient, token);
            });

            return builder.Build();
        }
    }
}

我的实际服务类: TestService.cs:

namespace Accounting.Shared.Services;

public interface ITestService
{
}

public class TestService : ITestService
{
    private HttpClient _httpClient;
    private string _token;

    public TestService(HttpClient httpClient, string token)
    {        
        _httpClient = httpClient;
        _token = token;
    }
}

最后,在MainPage.xaml.cs中,我try 依赖项注入:

namespace MauiClient;

using Accounting.Shared.Services;

public partial class MainPage : ContentPage
{
    int count = 0;

    private ITestService _testService;

    public MainPage(ITestService testService)
    {
        InitializeComponent();
        _testService = testService; 
    }

    private void OnCounterClicked(object sender, EventArgs e)
    {
    }
}

我不明白为什么它不能将其作为参数传递.任何帮助都将不胜感激.

推荐答案

当与<ShellContent>一起使用时,不仅需要注册ITestService,还需要注册MainPage:

builder.Services.AddTransient<ITestService>(s =>
{
    var httpClient = new HttpClient();
    var token = "";
    return new TestService(httpClient, token);
});

builder.Services.AddTransient<MainPage>();

return builder.Build();

这是因为Shell只能单独使用无参数构造函数.

Csharp相关问答推荐

Mstest + Coverlet在收件箱中没有达到100%的覆盖率,但我在Codecov中得到了100%的覆盖率

从C#重新启动Shell脚本时处理错误?

List T.AddRange在传递ConcurrentDictionary作为参数时引发ArgumentExcellent

为什么我在PuppeteerSharp中运行StealthPlugin时会出现错误?

将修剪声明放入LINQ中

需要深入了解NpgSQL DateTimeOffset处理

Blazor. NET 8—阶段启动配置文件不启动网站VS2022

如何使用C#Interop EXCEL创建度量衡

MongoDB.NET-将数据绑定到模型类,但无法读取整数值

需要在重新启动ApplicartionPool或IIS后启动/唤醒API的帮助

使用System.Text.Json进行序列化时发生StackOverflow异常

Blazor服务器项目中的Blazor/.NET 8/Web API不工作

C#使用相同内存的多个数组

Azure函数正在返回值列表,但该列表在Chrome中显示为空

Xamarin.Forms-如何创建可 Select 的显示alert 或弹出窗口?

如何在Cake脚本中设置MSBuild.exe的绝对路径

使用SQL Server 2022+时,我是否必须将代码从SqlConnection类对象中迁移出来?

ASP.NET核心MVC|如何在控制器方法之间传递值

最小API定义的Swagger标头参数

.NET8支持Vector512,但为什么向量不能达到512位?