WPF 使用依赖注入
修改App.xaml.cs 重新OnStartup和OnExit方法 并使用Host启动 解析appsettings.json配置文件
在App.xaml中删除StartUri属性,否则会启动多个MainWindow
包引用信息如下:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Hosting
/// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : System.Windows.Application { public static IHost? AppHost { get; private set; } public IConfiguration Configuration { get; private set; } public App() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); Configuration = builder.Build(); AppHost = Host.CreateDefaultBuilder() .ConfigureServices((hostContext, services) => { services.AddDbContext<PackingDbContext>(option => { var connectionString = Configuration.GetConnectionString("Mysql"); var serverVersion = ServerVersion.AutoDetect(connectionString); option.UseMySql(connectionString, serverVersion, p => p.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); //移除外键 option.ReplaceService<IMigrationsModelDiffer, MigrationsModelDifferWithoutForeignKey>(); }); services.AddScoped<MainWindow>(); services.AddSingleton(Configuration); //注册分布式Id生成器 services.AddSnowflake(Configuration); //注册AutoMapper services.AddAutoMapper(cfg => { cfg.AddProfile<PackingMapperProfile>(); }); //services inject var injectName = typeof(IService).Name; var injectTypes = Assembly.Load("Application").GetTypes().Where(p => p.IsClass); foreach (var t in injectTypes) { if (t.GetInterface(injectName) != null) services.AddScoped(t); } }).Build(); } protected override async void OnStartup(StartupEventArgs e) { await AppHost!.StartAsync(); var startUp = AppHost.Services.GetRequiredService<MainWindow>(); startUp.Show(); base.OnStartup(e); } protected override async void OnExit(ExitEventArgs e) { await AppHost!.StopAsync(); base.OnExit(e); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具