想法是主程序尽量的简单,其他的尽量按需调用。
所以把Demo这个主程序的内容大部分移到LunZi.Common项目去了。
- Demo的MauiProgram
public static MauiApp CreateMauiApp() { try { var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(@"C:\Plugin\windows\LunZi.Common.dll"); var type = assembly.GetType("LunZi.Common.MauiProgram"); var method = type!.GetMethod("CreateMauiApp", BindingFlags.Static | BindingFlags.Public); var app = (MauiApp)method!.Invoke(null, null)!; return app; } catch (Exception ex) { var builder = MauiApp.CreateBuilder(); builder.UseMauiApp<App>(); var msg = ex.Message + "\r\n" + ex.StackTrace; if (ex.InnerException != null) msg += "\r\n-----------InnerException--------------------\r\n" + ex.InnerException.ToString(); builder.Services.AddSingleton(ii => new MainPage(msg)); return builder.Build(); } } - LunZi.Common的MauiProgram
public static class MauiProgram { public static List<string> AssemblyNames { get; set; } = new(); public static MauiApp CreateMauiApp() { AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; return Create(); } private static MauiApp Create() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .UseMauiCommunityToolkit() .UseMauiCommunityToolkitMarkup() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); builder.AddLunZiService(); var app = builder.Build(); app.InitializeLunZi(); return app; } private static Assembly? CurrentDomain_AssemblyResolve(object? sender, ResolveEventArgs args) { var name = args.Name.Split(',')[0].Trim(); string fullName = Path.Combine(@"c:\plugin\packages", name.EndsWith(".resources") ? Thread.CurrentThread.CurrentCulture.Name : "", name + ".dll"); if (File.Exists(fullName)) { AssemblyNames.Add(name); return AssemblyLoadContext.Default.LoadFromAssemblyPath(fullName); } else return default; } }
以后Demo将基本不动,只要修改LunZi.Common,增加其他类库。想着公司刚好要开发Maui的程序,接一下就以公司产品为例,折腾折腾这个插件开发。
哦,我公司是开发酒店自助入住程序的,所以将会有这么一些插件

浙公网安备 33010602011771号