2016-07-21 14 views
7

Kể từ khi không có lớp ConfigurationManager trong NET Core, bây giờ tôi phải thiết lập cấu hình trong appsettings.json thay web.configKhông thể thiết lập cấu hình từ file JSON appSettings trong dự án .NET Lõi

Theo this bài đăng blog tôi có để đặt cấu hình của tôi ở đó, vì vậy tôi đã làm như thế này:

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    }, 

    "Conexion": { 
    "name" : "empresas", 
    "connectionString": "Data Source=empresas;Initial Catalog=CATALMA; Integrated Security=True;", 
    "providerName": "System.Data.SqlClient" 
    } 
} 

Tôi vừa mới ghi rằng "Conexion".

Bây giờ tôi tạo ra trong một thư mục ViewModels lớp sau:

public class ConexionConfig 
    { 
     public string name { get; set; } 
     public string connectionString { get; set; } 
     public string providerName { get; set; } 
    } 

Bây giờ, Trong Startup.cs, trong phương pháp ConfigureServices, tôi phải bổ sung nó bằng cách:

public void ConfigureServices(IServiceCollection services) 
     { 
      // Add framework services. 
      services.Configure<ConexionConfig>(Configuration.GetSection("Conexion")); 
      services.AddMvc(); 
     } 

Nhưng tiếc , Tôi nhận được lỗi sau:

Argument 2: cannot convert from 
    'Microsoft.Extensions.Configuration.IConfigurationSection' to 
    'System.Action<ConexionConfig>' 

Tôi đang thiếu gì?

+0

Xin chào, bạn đã bao giờ tìm được giải pháp cho điều này chưa? Tôi đã có chính xác cùng một vấn đề. – AndyM

+0

Có, nhưng tôi thay đổi nội dung appsettings.json để khớp với một ví dụ mà tôi thấy ở một nơi khác. –

+0

Xem câu trả lời được đăng –

Trả lời

3

Hãy thử cài đặt gói NuGet Microsoft.Extensions.Configuration.Binder và sử dụng Nó rất Bind phương pháp:

services.Configure<ConexionConfig>(x => Configuration.GetSection("Conexion").Bind(x)); 

Bạn cũng phải cài đặt các tùy chọn gói Microsoft.Extensions.Options và hỗ trợ thêm cho nó nếu bạn muốn tiêm lớp lựa chọn của bạn:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddOptions(); 
    //.. 
} 

Bây giờ bạn có thể tiêm IOptions<ConexionConfig> trong bộ điều khiển và chế độ xem của mình.

+0

Điều này sẽ làm việc bạn đúng, nhưng nếu muốn cấu hình nó theo cùng một cách nhiều hướng dẫn minh họa vấn đề thì chỉ cần thêm gói đúng. Xem câu trả lời của tôi ... –

0

Tôi dựa trên ví dụ ở một nơi khác. appsettings.json thay đổi một cái gì đó như thế này:

{ 
    "Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Debug", 
     "System": "Information", 
     "Microsoft": "Information" 
    } 
    }, 
    "Data": { 
    "DefaultConnection": { 
     "ConnectionString": "Data Source=myserver\\sql08;Initial Catalog=enterprises;User id=userAPP;Password=mypassword;" 
    } 
    } 
} 

lớp ConexionConfig thay đổi như sau:

public class ConexionConfig 
     { 

     public string ConnectionString { get; set; } 

    } 
} 

Sau đó Trong Startup.cs

... 
public void ConfigureServices(IServiceCollection services) 
     { 
      // Add framework services. 
      services.AddMvc(); 
      services.Configure<ConexionConfig>(Configuration.GetSection("Data:DefaultConnection")); 
     } 
... 

là quan trọng để bao gồm using Microsoft.Extensions.Configuration trong tập tin này.

+0

Tôi nghĩ rằng sự khác biệt duy nhất giữa câu hỏi ban đầu của bạn và câu trả lời này là bạn đã thêm gói đúng trên đường đi. Xem câu trả lời của tôi ... –

8

Trước hết là, bạn cần thêm gói nuget sau vào Dự án ASP Core của mình.

Microsoft.Extensions.Options.ConfigurationExtensions 

Phương pháp mở rộng chứa trong gói sẽ cho phép bạn định cấu hình cấu hình mạnh mẽ theo cách bạn muốn thực hiện.

services.Configure<ConexionConfig>(Configuration.GetSection("Conexion")); 

Ngoài ra, bạn có thể sử dụng chất kết dính trực tiếp như một câu trả lời trong chủ đề này cho thấy không quan trọng gói trước nhưng thay vì:

Microsoft.Extensions.Configuration.Binder 

này có nghĩa là bạn sẽ phải kích hoạt một cách rõ ràng các tùy chọn trên đường ống và ràng buộc hành động.Đó là:

services.AddOptions(); 
services.Configure<ConexionConfig>(x => Configuration.GetSection("Conexion").Bind(x)); 
+0

Câu trả lời này hữu ích. Chỉ cần một lưu ý, với ** ASP.NET Core 2.0 **, NuGet bổ sung là không cần thiết. –

Các vấn đề liên quan