Saya telah melalui dokumentasi konfigurasi pada inti ASP.NET. Dokumentasi mengatakan Anda dapat mengakses konfigurasi dari mana saja dalam aplikasi.
Di bawah ini adalah Startup.cs yang dibuat oleh template
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
}
Jadi dalam Startup.cs
kami mengkonfigurasi semua pengaturan, Startup.cs juga memiliki properti bernamaConfiguration
Apa yang saya tidak dapat mengerti bagaimana Anda mengakses konfigurasi ini di pengontrol atau di mana pun dalam aplikasi? MS merekomendasikan untuk menggunakan pola opsi tetapi saya hanya memiliki 4-5 pasangan nilai kunci jadi saya tidak ingin menggunakan pola opsi. Saya hanya ingin memiliki akses ke Konfigurasi dalam aplikasi. Bagaimana cara menyuntikkannya di kelas mana pun?
Jawaban:
Memperbarui
Menggunakan ASP.NET Core 2.0 akan secara otomatis menambahkan
IConfiguration
instance aplikasi Anda di wadah injeksi ketergantungan. Ini juga bekerja bersama denganConfigureAppConfiguration
diWebHostBuilder
.Sebagai contoh:
Ini semudah menambahkan
IConfiguration
instance ke koleksi layanan sebagai objek tunggal diConfigureServices
:Di mana
Configuration
contoh diStartup
kelas Anda .Ini memungkinkan Anda untuk memasukkan
IConfiguration
pengontrol atau layanan apa pun:sumber
IConfiguration
seperti itu sangat bocor. Jauh lebih baik menggunakan pola Opsi .Di .NET Core Anda dapat memasukkan
IConfiguration
sebagai parameter ke konstruktor Kelas Anda, dan itu akan tersedia.Sekarang, ketika Anda ingin membuat sebuah instance dari kelas Anda, karena kelas Anda diinjeksi
IConfiguration
, Anda tidak akan dapat melakukannya begitu sajanew MyClass()
, karena ini membutuhkanIConfiguration
parameter yang dimasukkan ke dalam konstruktor, jadi, Anda perlu memasukkan kelas Anda sebagai baik ke rantai injeksi, yang berarti dua langkah sederhana:1) Tambah Kelas / es - di mana Anda ingin menggunakan
IConfiguration
, untukIServiceCollection
diConfigureServices()
metode dalamStartup.cs
2) Definisikan sebuah instance - katakanlah di
Controller
, dan masukkan menggunakan konstruktor:Sekarang Anda harus dapat menikmati
_myClass.configuration
...Jika Anda masih mencari cara untuk membuatnya tersedia tanpa harus memasukkan kelas ke dalam pengontrol, maka Anda dapat menyimpannya di
static class
, yang akan Anda konfigurasikan diStartup.cs
, seperti:Dan
Startup
konstruktor Anda akan terlihat seperti ini:Kemudian gunakan
MyAppData.Configuration
di mana saja di program Anda.Jangan tanyakan kepada saya mengapa opsi pertama adalah cara yang benar, saya hanya bisa melihat pengembang berpengalaman selalu menghindari data sampah di sepanjang jalan mereka, dan sangat dipahami bahwa bukan praktik terbaik untuk memiliki banyak data yang tersedia di memori setiap saat, juga tidak baik untuk kinerja dan atau untuk pengembangan, dan mungkin juga lebih aman untuk hanya membawa apa yang Anda butuhkan.
sumber
System.Configuration
INTI kembali ke jalurnya. Sekarang, Anda dapat mengakses app.configs lama Anda seperti di masa lalu. Dan saya tidak berbicara tentang pengendali di sini. Kita membicarakan komponen yang memiliki konfigurasinya sendiriSaya tahu ini sudah tua tetapi mengingat pola IOptions relatif sederhana untuk diterapkan:
Kelas dengan properti get / set publik yang cocok dengan pengaturan dalam konfigurasi
daftarkan pengaturan Anda
menyuntikkan melalui IOptions
Saya tidak yakin mengapa Anda tidak melakukan ini begitu saja.
sumber
Microsoft.Extensions.Configuration
,Microsoft.Extensions.Configuration.Binder
danMicrosoft.Extensions.Configuration.Json
kemudian Anda memuatappsettings.json
file sepertivar config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
.. dan juga Anda harus memastikanappsettings.json
salin ke direktori output disetel kecopy always
Saya melakukannya seperti ini sekarang:
Dan kemudian saya menggunakan ini di mana saya perlu mendapatkan data dari file appsettings.json:
sumber
Ada juga opsi untuk membuat
configuration
statis di startup.cs sehingga apa yang bisa Anda akses di mana saja dengan mudah, variabel statis nyaman ya!Ini membuat konfigurasi dapat diakses di mana saja menggunakan
Startup.Configuration.GetSection...
Apa yang bisa salah?sumber
Saya melihat ke contoh pola opsi dan melihat ini:
Saat menambahkan Iconfiguration di konstruktor kelas saya, saya dapat mengakses opsi konfigurasi melalui DI.
Contoh:
sumber
Saya tahu mungkin ada beberapa cara untuk melakukan ini, saya menggunakan Core 3.1 dan sedang mencari opsi optimal / bersih dan akhirnya saya melakukan ini:
sumber
Pada 8-2017 Microsoft keluar dengan
System.Configuration
untuk .NET CORE v4.4. Saat ini pratinjau v4.5 dan v4.6.Bagi kita, yang mengerjakan transformasi dari .Net Framework ke CORE, ini penting. Ini memungkinkan untuk menyimpan dan menggunakan
app.config
file saat ini , yang dapat diakses dari perakitan apa pun. Bahkan mungkin bisa menjadi alternatifappsettings.json
, karena Microsoft menyadari kebutuhannya. Ini bekerja sama seperti sebelumnya di FW. Ada satu perbedaan:Dalam aplikasi web, [mis. ASP.NET CORE WEB API] Anda perlu menggunakan
app.config
dan bukan web.config untukappSettings
atauconfigurationSection
. Anda mungkin perlu menggunakanweb.config
tetapi hanya jika Anda menyebarkan situs Anda melalui IIS. Anda menempatkan pengaturan khusus IIS keweb.config
Saya telah mengujinya dengan netstandard20 DLL dan Asp.net Core Web Api dan semuanya berfungsi.
sumber
Menggunakan pola Opsi di ASP.NET Core adalah cara yang harus dilakukan. Saya hanya ingin menambahkan, jika Anda perlu mengakses opsi dalam startup.cs Anda , saya sarankan untuk melakukannya dengan cara ini:
CosmosDbOptions.cs:
Startup.cs:
sumber
Saya harus membaca parameter sendiri saat memulai.
Itu harus ada di sana sebelum WebHost dimulai (karena saya membutuhkan url / IP "untuk mendengarkan" dan port dari file parameter dan menerapkannya ke WebHost). Selanjutnya, saya membutuhkan pengaturan publik di seluruh aplikasi.
Setelah mencari beberapa saat (tidak ada contoh lengkap yang ditemukan, hanya cuplikan) dan setelah berbagai coba-coba, saya memutuskan untuk melakukannya dengan "cara lama" dengan file .ini sendiri.
Jadi .. jika Anda ingin menggunakan memiliki file .ini dan / atau mengatur "untuk mendengarkan url / IP" Anda sendiri dan / atau memerlukan pengaturan publik, ini untuk Anda ...
Contoh lengkap, valid untuk core 2.1 (mvc):
Buat file .ini - contoh:
dimana Dummyx hanya disertakan sebagai contoh untuk tipe tanggal lain selain string (dan juga untuk menguji kasus “salah param” (lihat kode di bawah).
Menambahkan file kode di root proyek, untuk menyimpan variabel global:
Mengubah kode di program.cs (sebelum CreateWebHostBuilder ()):
Cara ini:
Jika - eg - tipe yang salah disetel (mis. * Dummy1 = gew7623 diaktifkan alih-alih Dummy1 = true) host menunjukkan warna merah informasi ada di konsol (termasuk pengecualian) dan saya dapat bereaksi juga dalam aplikasi (GV.bFehler_Ini ist disetel ke true, jika ada kesalahan dengan .ini)
sumber