winform 使用依赖注入
using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Packing.Application.ServiceInject; using Packing.EntityFrameworkCore; using Packing.Wf.AutoMapper; using System.Reflection; using UtilExtensions; namespace Wf { internal static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); //生成 DI 容器 var services = new ServiceCollection(); ConfigureServices(services); var serviceProvider = services.BuildServiceProvider(); var mainForm = serviceProvider.GetRequiredService<MainForm>(); System.Windows.Forms.Application.Run(mainForm); } private static void ConfigureServices(IServiceCollection services) { //注册 FormMain 类 services.AddScoped<MainForm>(); //register configuration IConfigurationBuilder cfgBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")}.json", optional: true, reloadOnChange: false); IConfiguration configuration = cfgBuilder.Build(); services.AddSingleton(configuration); 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>(); }); //注册分布式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); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现