2014-11-27 22 views
11

Muhtemelen bu konuya uzun bir süre bakıyordum ama son birkaç gündür asp.net için MVC6'ya atladım, gerçekten bundan hoşlanıyorum. o yüzdenDünya çapında IConfiguration'ı mvc6 içinde kullanma

Configuration = new Configuration() 
    .AddJsonFile("config.json") 
    ... 

ile Start.cs tanımlanır sonra Yapılandırma erişmek için uygun yol, ben DI eklemek gerekir veya zaten var mı? Veya farklı bir konfigürasyon oluşturmak için (örneğin, IIdentityMessageService için) bir sendgrid.json oluşturmak ve Servisin kendisinin içine yüklemek mümkün olduğu için yeni bir örnek oluşturmalı mıyım?

Muhtemelen çok kolay bir çözüm var, ama sanki günlerdir buna baktığımı söylediğim gibi.

cevap

15

Yalnızca Yapılandırmaların yüklemesini Startup.cs sayfanızda yapın. Daha sonra başka bir yere ihtiyacınız varsa, değerleri uygun POCO'lara yükleyebilir ve bunları DI'ye kaydedebilirsiniz, böylece onlara ihtiyacınız olan yere enjekte edebilirsiniz. Bu, yapılandırmanızı farklı dosyalarda ve uygulamanıza mantıklı bir şekilde farklı POCO'larda düzenlemenizi sağlar. Bağımlılık enjeksiyonunda bunun için zaten destek var. İşte bunu görecektir:

bir POCO da yapılandırmayı koymak için:

public class SomeOptions 
{ 
    public string EndpointUrl { get; set; } 
} 

Kişisel Startup.cs POCO içine yapılandırmasını yükler ve DI bunu kaydeder. 1.0.0-beta1 ile test edilmiştir

public class SomeController 
{ 
    private string _endpointUrl; 
    public SomeController(IOptions<SomeOptions> options) 
    { 
     _endpointUrl = options.Options.EndpointUrl; 
    } 
} 

aspnet5 ait oluşturur:

public class Startup 
{ 
    public Startup() 
    { 
     Configuration = new Configuration() 
        .AddJsonFile("Config.json") 
        .AddEnvironmentVariables(); 
    } 

    public IConfiguration Configuration { get; set; } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseMvc(); 
    } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services.Configure<SomeOptions>(options => 
      options.EndpointUrl = Configuration.Get("EndpointUrl")); 

     services.AddMvc(); 
    } 
} 

Sonra denetleyicisi yapılandırma POCO olsun içinde böyle bağımlılık enjeksiyon yoluyla Startup.cs oluşturulan.

Daha fazla bilgi için bkz. The fundamentals of ASP.Net 5 Configuration.

+0

Aradığım şey buydu, hizmet koleksiyonundaki Configure seçeneğini kaçırmış gibi görünüyor. –

+0

Hey AndersNS, Bunu denedim ama 'IOptions seçeneklerinde bir hata alıyorum' Bu enjekte edilmek gerekiyor mu? –

+0

Örneğim, IOptions 'u SomeController yes içine almak için constructor injection kullanıyor. – AndersNS

İlgili konular