首页 > 其他分享 >WPF 使用依赖注入

WPF 使用依赖注入

时间:2023-04-14 09:33:35浏览次数:39  
标签:AppHost 依赖 App var Extensions services WPF Configuration 注入

修改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);
        }
    }

 

标签:AppHost,依赖,App,var,Extensions,services,WPF,Configuration,注入
From: https://www.cnblogs.com/mwtsai/p/17317291.html

相关文章

  • wpf使用winform控件
    一、添加引用WindowsFormsIntegration.dll(负责整合WPF和Windows)System.Windows.Forms.dll(WinForm自带的控件库)提示:这两个引用都是在程序集中可以直接找到的ControlLib_k.dll(自定义的控件库)二、在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容:xmlns是XML_Namespac......
  • apko不依赖dockerfile基于apk 包构建oci 镜像的工具
    可以方便的基于apk包进行oci镜像的构建以及发布包含的特性可重复执行同时确认二进制文件一致快速小sbom支持服务支持,基于s4安装可以通过goinstall以及docker模式运行goinstallchainguard.dev/apko@latest使用配置contents:......
  • 本程序采用matlab编写,主要是实现电流注入型牛拉法 除此之外
    本程序采用matlab编写,主要是实现电流注入型牛拉法除此之外,本人还编写了很多种关于潮流计算的程序,主要有牛拉法,前推回代法,以还有相和三相潮流计算程序ID:7230641108921290......
  • 分析web应用内引用依赖的占比
    背景针对目前团队自己开发的组件库,对当前系统内引用组件库占比进行统计分析,以实现对当前进度的总结以及后续的覆盖度目标制定。主要思路目前找到的webpack分析插件,基本都是针对打包之后的分析打包之后的chunk进行分析,但是我希望的是分析每个页面中的import数,对比一下在所有页......
  • js注入cookie不生效的情况
    场景直接使用js注入cookie发现不生效,其实只设置了key和values值,没有注意其他字段。后来发现还有个domain的字段需要配置,不然注入是不会生效的document.cookie="token=123;domain=.baidu.com"#使用;分号隔开......
  • WPF 自定义控件 二次渲染 问题记录
    问题将多个自定义控件加载到到一个页面的Grid上显示。然后突然将一个控件从Grid里面清除,控件依然在后台处理数据。过段时间再加入Grid。然后一些已经改变的页面属性就消失了。原因经过查找是一旦控件再次加载,页面属性就会重置。这个有利也有弊端。1是可以利用这点重置页面2......
  • 微网电压调节控制源代码 通过控制分布式微网发电无功注入来调节配电网电压分布的问题
    微网电压调节控制源代码,保证正确通过控制分布式微网发电无功注入来调节配电网电压分布的问题。首先介绍了一类非常普遍的纯局部控制策略,并通过一个反例演示了这类策略中的所有策略都无法将电网驱动到可行电压的配置。用一个标准的IEEE测试案例和真实数据进行了数值模拟,结果表明......
  • spring源码-之解决循环依赖
    Spring如何解决循环依赖为了解决循环依赖,Spring使用了三级缓存。一级缓存用于存储bean定义。二级缓存用于存放已经创建但还没有完全初始化的前期bean实例。三级缓存用于存放完全初始化的bean实例。当检测到循环依赖时,Spring会创建一个部分初始化的bean实例并将其存储在二......
  • SpringBoot向web容器注入Servlet,Filter及SpringSecurity注册DelegatingFilterProxy
    从SpringSecurity架构图可知SpringSecurity的过滤器与Web容器的过滤器是通过DelegatingFilterProxy接入的。由DelegatingFilterProxy代理了FilterChainProxy,FilterChainProxy包含了SpringSecurity的过滤器链。 那么DelegatingFilterProxy是怎么创建及如何加入到Web容器中? 看......
  • Mybatis-Plus如何自定义SQL注入器?
    有关Mybatis-Plus常用功能之前有做过一篇总结:MyBatisPlus常用功能总结!(附项目示例)一、什么是SQL注入器我们在使用Mybatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法,BaseMapper中每一个方法其实就是一个SQL注入器在Mybatis-Plus的核心(core......