我正在使用.net Core 3.00创建一个WPF项目,并且在将项目appsettings.json文件添加到要用于存储数据库连接字符串的项目时遇到了麻烦。

我通常会在app.config内部完成操作,但是现在已从.net Core中删除了此操作。

到处都提到要使用appsettings.json进行替换,并且必须使用OnStartUp()实例在IConfiguration函数中手动添加和初始化它,然后再使用依赖注入(inject)将config类传递到项目中。

但是我的问题是只能在appsettings.json项目上添加asp.net Core项目??不是我的WPF解决方案。

如果我很想念东西(我大概是这样),我会采取行动,我似乎找不到任何解决办法。

提前谢谢了

最佳答案

步骤:

  • 添加以下nuget包
      Microsoft.Extensions.Configuration
      Microsoft.Extensions.Configuration.FileExtensions
      Microsoft.Extensions.Configuration.Json
      Microsoft.Extensions.DependencyInjection
    
  • 您需要手动创建和添加appsettings.json并将copy it to output directory设置为copy if newer

  • AppSetting.json
       {
      "ConnectionStrings": {
        "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
      },
    }
    
    Program.cs(用于.NetCore控制台应用程序)
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
        IConfigurationRoot configuration = builder.Build();
    
        Console.WriteLine(configuration.GetConnectionString("BloggingDatabase"));
    }
    
    App.xaml.cs(对于.NET CORE WPF)
    public partial class App : Application
    {
        public IServiceProvider ServiceProvider { get; private set; }
    
        public IConfiguration Configuration { get; private set; }
    
        protected override void OnStartup(StartupEventArgs e)
        {
            var builder = new ConfigurationBuilder()
             .SetBasePath(Directory.GetCurrentDirectory())
             .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
    
            Configuration = builder.Build();
    
          Console.WriteLine(Configuration.GetConnectionString("BloggingDatabase"));
    
            var serviceCollection = new ServiceCollection();
            ConfigureServices(serviceCollection);
    
            ServiceProvider = serviceCollection.BuildServiceProvider();
    
            var mainWindow = ServiceProvider.GetRequiredService<MainWindow>();
            mainWindow.Show();
        }
    
        private void ConfigureServices(IServiceCollection services)
        {
            // ...
    
            services.AddTransient(typeof(MainWindow));
        }
    }
    

    引用:
  • https://blog.bitscry.com/2017/05/30/appsettings-json-in-net-core-console-app/
  • https://marcominerva.wordpress.com/2019/03/06/using-net-core-3-0-dependency-injection-and-service-provider-with-wpf/
  • https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings
  • 09-26 23:57
    查看更多