Net MAUI 依赖注入不起作用

问题描述 投票:0回答:1

我尝试在 Net Maui 应用程序中配置依赖项注入。我遵循了一些在线教程,阅读了几个 stackoverflow 线程,但是似乎没有任何效果。经过大量修改这些东西后,我不知道为什么这不起作用。

MauiApp 相当简单。 我在这里设置:Serilog、配置和项目库中的类。这应该有效。

        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            
            InitializeLogger();

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

            // Configuration
            using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BookLibrary.appsettings.json");
            var config = new ConfigurationBuilder().AddJsonStream(stream).Build();
            builder.Configuration.AddConfiguration(config);

            // Logging
            builder.Logging.AddSerilog(dispose: true);

            builder.Services.AddTransient<IBooksDao, BooksDao>();
            builder.Services.AddTransient<IChaptersDao, ChaptersDao>();
            builder.Services.AddTransient<IPagesDao, PagesDao>();
            builder.Services.AddTransient<IBookWriter, BookWriter>();

            builder.Services.AddSingleton<MainPage>();
            builder.Services.AddMauiBlazorWebView();

#if DEBUG
            builder.Services.AddBlazorWebViewDeveloperTools();
            builder.Logging.AddDebug();
#endif

            return builder.Build();
        }
        private static void InitializeLogger()
        {
            var flushInterval = new TimeSpan(0, 0, 1);
            var file = Path.Combine(AppContext.BaseDirectory, "Logs/Log_.txt");
            
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Verbose()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.File(file, 
                    flushToDiskInterval: flushInterval, 
                    encoding: System.Text.Encoding.UTF8, 
                    rollingInterval: RollingInterval.Day, 
                    retainedFileCountLimit: 22)
                .CreateLogger();
        }
    }

MainPage 类,在构造函数中我注入了我需要的所有内容。

    public partial class MainPage : ContentPage
    {
        private readonly IConfiguration _configuration;
        private readonly ILogger _log;
        private readonly IBookWriter _writer;

        public MainPage(IConfiguration configuration, ILogger log, IBookWriter writer)
        {
            _configuration = configuration;
            _log = log;
            _writer = writer;
            
            InitializeComponent();
        }
    }

但是,在 App 类中,有一个错误连接到

MainPage()
(它有红色下划线),并且信息表明所需参数
configuration
没有参数。如果我删除配置参数,那么问题就会变成
log
等等。看起来 DI 根本不起作用。我什至安装了 nugets:
Microsoft.Extensions.Configuation.Binder
Microsoft.Extensions.Configuation.Json
Serilog.Extensions.Logging
,但似乎没有任何帮助。

    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

    }

我显然在某个地方做错了,但我无法自己找到它。

c# .net dependency-injection maui maui-blazor
1个回答
0
投票

您已经为

MainPage
注册了DI,因此您不必使用
new MainPage()
。应该是:

public partial class App : Application
    {
        public App(MainPage mainpage)
        {
            InitializeComponent();

            MainPage = mainpage;
        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.