2017-10-20 80 views
12

Làm thế nào tôi có thể thiết lập đường dẫn cơ bản trong ConfigurationBuilder trong Core 2.0.Làm thế nào để SetBasePath trong ConfigurationBuilder trong Core 2.0

Tôi có googled và thấy this câu hỏi, this từ tài liệu của Microsoft, và 2.0 tài liệu trực tuyến, nhưng họ dường như được sử dụng một phiên bản của Microsoft.Extension.Configuration từ 1.0.0-beta8.

Tôi muốn đọc appsettings.json. Có cách nào mới để làm điều này trong Core 2.0?

using System; 
using System.IO; 
using Microsoft.Extensions.Configuration; 
namespace ConsoleApp2 
{ 
    class Program 
    { 
     public static IConfigurationRoot Configuration { get; set; } 

     static void Main(string[] args) 
     { 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(Directory.GetCurrentDirectory()) // <== compile failing here 
       .AddJsonFile("appsettings.json"); 

      Configuration = builder.Build(); 

      Console.WriteLine(Configuration.GetConnectionString("con")); 
      Console.WriteLine("Press a key..."); 
      Console.ReadKey(); 
     } 
    } 
} 

appsetting.json

{ 
    "ConnectionStrings": { 
    "con": "connection string" 
    } 
} 

UPDATE: Cũng như thêm Miscrosoft.Extension.Configuration.FileExtenson như được chỉ ra bởi Set tôi cũng cần thêm Microsoft.Extensions.Configuration.Json để có được phần mở rộng AddJsonFile.

Trả lời

5

Tôi đang phát triển ứng dụng giao diện điều khiển .NET Core 2 bằng Visual Studio 2017 v15.5. Như những người khác đã lưu ý, sau khi thêm Microsoft.Extensions.Configuration tôi cần thêm Microsoft.Extensions.Configuration.Json để gọi điện thoại AddJsonFile() hoạt động. Điều này cũng đã thực hiện công việc gọi SetBasePath(); vì vậy tôi không cần để thêm Cấu hình.FileExtensions. (Mã của tôi biên dịch và chạy cả khi có và không có nó.)

Tôi cũng đã có một cuộc gọi đến AddEnvironmentVariables(), mà tôi cần phải thêm Configuration.EnvironmentVariables. Mã của tôi là như sau:

var builder = new ConfigurationBuilder() 
        .SetBasePath(Directory.GetCurrentDirectory()) // requires Microsoft.Extensions.Configuration.Json 
        .AddJsonFile("appsettings.json") // requires Microsoft.Extensions.Configuration.Json 
        .AddEnvironmentVariables(); // requires Microsoft.Extensions.Configuration.EnvironmentVariables 
    Configuration = builder.Build(); 

Điều thú vị là chỉ using tuyên bố tôi cần là using Microsoft.Extensions.Configuration.

1

Sử dụng cả 'Microsoft.Extensions.Configuration' và 'Microsoft.Extensions.Configuration.Json' thao tác này sẽ giải quyết được sự cố.

https://www.nuget.org/packages/Microsoft.Extensions.Configuration/ https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/

Đây là mẫu 'ConnectionFactory'

using System.Data; 
using System.Data.SqlClient; 
using Microsoft.Extensions.Configuration; 
using System.IO; 

namespace DataAccess.Infrastructure 
{ 
public class ConnectionFactory : IConnectionFactory 
{ 
    public ConnectionFactory() 
    { 
     var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json"); 
     Configuration = builder.Build(); 
    } 


    public IConfigurationRoot Configuration { get; } 
    public IDbConnection GetConnection 
    { 
     get 
     { 
      var connectionString = Configuration.GetConnectionString("DefaultConnection"); 
      var conn = new SqlConnection(connectionString); 
      conn.Open(); 
      return conn; 
     } 
    } 

    #region IDisposable Support 
    private bool disposedValue = false; // To detect redundant calls 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!disposedValue) 
     { 
      if (disposing) 
      { 
       // TODO: dispose managed state (managed objects). 
      } 


      // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. 
      // TODO: set large fields to null. 

      disposedValue = true; 
     } 
    } 

    // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. 
    // ~ConnectionFactory() { 
    // // Do not change this code. Put cleanup code in Dispose(bool disposing) above. 
    // Dispose(false); 
    // } 

    // This code added to correctly implement the disposable pattern. 
    public void Dispose() 
    { 
     // Do not change this code. Put cleanup code in Dispose(bool disposing) above. 
     Dispose(true); 
     // TODO: uncomment the following line if the finalizer is overridden above. 
     // GC.SuppressFinalize(this); 
    } 
    #endregion 
} } 
Các vấn đề liên quan