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);
            }
        }
    }
}
复制代码

 

posted @   maxwelltsai  阅读(588)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示