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 @ 2023-04-18 16:34  maxwelltsai  阅读(679)  评论(0)    收藏  举报