मैं ASP.NET कोर में किसी भी वर्ग में कॉन्फ़िगरेशन का उपयोग कैसे करूं?


127

मैं ASP.NET कोर पर कॉन्फ़िगरेशन प्रलेखन के माध्यम से चला गया । दस्तावेज़ीकरण कहता है कि आप एप्लिकेशन में कहीं से भी कॉन्फ़िगरेशन एक्सेस कर सकते हैं।

नीचे Startup.cs टेम्पलेट द्वारा बनाया गया है

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();
    }
}

इसलिए Startup.csहम सभी सेटिंग्स को कॉन्फ़िगर करते हैं, Startup.cs में एक संपत्ति भी है जिसका नाम हैConfiguration

मैं यह समझने में सक्षम नहीं हूं कि आप इस कॉन्फ़िगरेशन को नियंत्रक या एप्लिकेशन में कहीं भी कैसे एक्सेस कर सकते हैं? एमएस विकल्प पैटर्न का उपयोग करने की सिफारिश कर रहा है, लेकिन मेरे पास केवल 4-5 कुंजी-मूल्य जोड़े हैं इसलिए मैं विकल्प पैटर्न का उपयोग नहीं करना चाहूंगा। मैं सिर्फ आवेदन में विन्यास तक पहुँच चाहता था। मैं इसे किसी भी वर्ग में कैसे इंजेक्ट कर सकता हूं?


1
यदि यह 4-5 प्रमुख मूल्य जोड़े हैं तो आप बस उन व्यक्तिगत सेटिंग्स को इंजेक्ट कर सकते हैं। मैं सलाह देता हूं कि परीक्षण के उद्देश्यों के लिए दृष्टिकोण या विकल्प पैटर्न। सभी तीन विधियाँ (मूल रूप से जिनके बारे में आपसे पूछा गया था) निम्नलिखित संभावित नकल के प्रश्नों के उत्तर के रूप में सूचीबद्ध हैं: stackoverflow.com/questions/30263681/…
stephen.vakil

कहीं से भी एक शब्दकोश के रूप में कॉन्फ़िगरेशन को एक्सेस करने के लिए, इस उत्तर की जांच करें
अमरो

पूर्ण कोड उदाहरण के लिए यहां देखें ।
अर्घ्य सी

यदि आप यहां आते हैं क्योंकि आप फ्रेमवर्क कॉन्फ़िगरेशन को CORE कॉन्फ़िगरेशन में परिवर्तित करने से कतरा रहे हैं, तो यह उत्तर आपके लिए है stackoverflow.com/a/56498687/1704458
TS

जवाबों:


148

अपडेट करें

ASP.NET कोर 2.0 का उपयोग करने से स्वचालित रूपIConfiguration से निर्भरता इंजेक्शन कंटेनर में आपके आवेदन का उदाहरण जुड़ जाएगा । यह भी साथ संयोजन के रूप में काम करता है ConfigureAppConfigurationपर WebHostBuilder

उदाहरण के लिए:

public static void Main(string[] args)
{
    var host = WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(builder =>
        {
            builder.AddIniFile("foo.ini");
        })
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

यह केवल IConfigurationएक एकल वस्तु के रूप में सेवा संग्रह में उदाहरण जोड़ने के रूप में आसान है ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
   services.AddSingleton<IConfiguration>(Configuration);

   // ...
}

Configurationआपकी Startupकक्षा में उदाहरण कहां है ।

यह आपको IConfigurationकिसी भी नियंत्रक या सेवा में इंजेक्ट करने की अनुमति देता है :

public class HomeController
{
   public HomeController(IConfiguration configuration)
   {
      // Use IConfiguration instance
   }
}

4
मोलारना .... और अगर आप समाधान में एक अलग कक्षा पुस्तकालय परियोजना में कॉन्फ़िगरेशन को इंजेक्ट करना चाहते हैं तो कैसे करें? इस निजी स्थैतिक IConfiguration _configuration {get; सेट; } सार्वजनिक डेटाबेसहेल्पर्स (IConfiguration कॉन्फ़िगरेशन) {_configuration = कॉन्फ़िगरेशन; } लेकिन _configuration हमेशा रिक्त है ... उस में contstructor हिट हो जाता है कभी नहीं
dinotom

2
उस ने कहा, इस IConfigurationतरह से गुजरना बहुत ही लचर है। विकल्प पैटर्न का उपयोग करना बेहतर है ।
मार्क एल।

7
सीधे एक कस्टम वर्ग में "appsettings.json" से मूल्यों का उपयोग कैसे करें? एक नियंत्रक से डेटा पारित किए बिना? क्या यह संभव है?
तडेज

2
@HenkMollema क्या आप इसका एक उदाहरण यहाँ जोड़ सकते हैं? मैं इसे किसी भी वर्ग (कहाँ से?) में इंजेक्ट करूँगा।
तद्ज

5
@HenkMollema सवाल यह था कि किसी भी वर्ग में इंजेक्शन कैसे लगाया जाए ... "निर्भरता इंजेक्शन के माध्यम से हल किए गए किसी भी वर्ग" में कैसे इंजेक्ट किया जाए। मुझे लगता है कि जहां गलतफहमी है ... संभवतः उनकी कक्षा को एक चेन से नहीं बुलाया जा रहा है जो एक नियंत्रक या अन्य ऑब्जेक्ट से शुरू होता है जो स्वचालित DI प्रक्रिया द्वारा स्वचालित रूप से हल किया जाता है।
डेफर्नोन

34

इसे करने का सही तरीका:

.NET कोर में आप इंजेक्ट कर सकते हैं IConfiguration अपने क्लास कंस्ट्रक्टर में एक पैरामीटर रूप में , और यह उपलब्ध होगा।

public class MyClass 
{
    private IConfiguration configuration;
    public MyClass(IConfiguration configuration)
    {
        ConnectionString = new configuration.GetValue<string>("ConnectionString");
    }

अब, जब आप अपनी कक्षा का एक उदाहरण बनाना चाहते हैं, जब से आपकी कक्षा इंजेक्ट की जाती है IConfiguration , तो आप बस करने में सक्षम नहीं होंगे new MyClass(), क्योंकि इसके लिए एक IConfigurationपैरामीटर को इंजेक्टर में इंजेक्ट करने की आवश्यकता होती है , इसलिए, आपको अपनी कक्षा को इंजेक्ट करने की आवश्यकता होगी इंजेक्शन की श्रृंखला के लिए अच्छी तरह से, जिसका अर्थ है दो सरल चरण:

जहां आप उपयोग करना चाहते - 1) अपनी कक्षा / es जोड़े IConfigurationके लिए, IServiceCollectionपर ConfigureServices()में विधिStartup.cs

services.AddTransient<MyClass>();

2) एक उदाहरण को परिभाषित करें - चलो कहते हैं Controllerऔर निर्माणकर्ता का उपयोग करके इसे इंजेक्ट करें:

public class MyController : ControllerBase
{
    private MyClass _myClass;
    public MyController(MyClass myClass)
    {
        _myClass = myClass;
    }

अब आपको अपनी _myClass.configurationआज़ादी का आनंद लेने में सक्षम होना चाहिए ...

एक अन्य विकल्प:

यदि आप अभी भी कंट्रोलर में कक्षाओं को इंजेक्ट किए बिना इसे उपलब्ध करने का एक तरीका खोज रहे हैं, तो आप इसे एक में स्टोर कर सकते हैं static class, जिसे आप कॉन्फ़िगर करेंगे Startup.cs, जैसे कुछ:

public static class MyAppData
{
    public static IConfiguration Configuration;
}

और आपके Startupनिर्माता को इस तरह दिखना चाहिए:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    MyAppData.Configuration = configuration;
}

फिर MyAppData.Configurationअपने कार्यक्रम में कहीं भी उपयोग करें।

मेरा सामना न करें कि पहला विकल्प सही तरीका क्यों है, मैं सिर्फ अनुभवी डेवलपर्स को हमेशा अपने रास्ते से कचरा डेटा से बचने के लिए देख सकता हूं, और यह अच्छी तरह से समझ में आता है कि हर समय मेमोरी में उपलब्ध डेटा का लोड रखना सबसे अच्छा अभ्यास नहीं है, न तो यह प्रदर्शन के लिए अच्छा है और न ही विकास के लिए, और शायद यह भी अधिक सुरक्षित है कि केवल आपके साथ आपके लिए आवश्यक है।


5
कॉन्फ़िगरेशन फ़ाइलों का यह सभी इंजेक्शन थोड़े व्यर्थ / गन्दा लगता है। स्थैतिक विन्यास वर्ग विचार के लिए TY।
एंड्रयू

1
बेशक, किसी भी वर्ग में विन्यास तक पहुँचने के बारे में था, न कि केवल नियंत्रक के बारे में। और दुबली सेवाओं (माइक्रोसर्विसेज) के नए विकास के साथ, इस बारे में सोचा जा सकता है, जब पलायन की बात आती है, तो यह बड़ा दर्द है। यही कारण है कि Microsoft System.ConfigurationCORE के लिए ट्रैक पर वापस आ गया। अब, आप अपने अच्छे पुराने ऐप को एक्सेस कर सकते हैं। अच्छे पुराने समय की तरह ही। और मैं यहाँ नियंत्रकों से बात नहीं कर रहा हूँ। हम ऐसे घटकों की बात कर रहे हैं जिनके अपने विन्यास हैं
TS

यह किसी भी वर्ग में प्रवेश करने की अनुमति देता है और न केवल नियंत्रक में, यह निर्भरता इंजेक्शन प्राप्त करने के लिए नियंत्रक में आयात करने की आवश्यकता है।
मेयर स्पिट्जर

1
या तो विधि काम करती है, और प्रत्येक के लिए या उनके खिलाफ तर्क मेरी राय में अकादमिक हैं। मैंने विभिन्न अनुप्रयोगों के लिए दोनों का उपयोग किया है ... अब, आपके बेहद आसान दूसरे विकल्प के लिए धन्यवाद। DI का उपयोग करके स्थिर वर्ग बनाना कठिन है।
इंजाजा

दूसरी विधि भी .net Core 2.0 में एक आम मुद्दे के साथ मदद करती है - एक POST पैरामीटर (यानी, JSON से स्वचालित रूप से deserialized) के रूप में त्वरित वस्तुओं, जहां आपको कंस्ट्रक्टर में इंजेक्ट करने का अवसर नहीं है (कम से कम बिना बहुत कुछ नहीं अतिरिक्त कोड का)। यह उस परिदृश्य के लिए बहुत अच्छा काम करता है
जो मून

30

मुझे पता है कि यह पुराना है, लेकिन IOptions पैटर्न को लागू करना अपेक्षाकृत सरल है:

  1. सार्वजनिक के साथ वर्ग को / सेट गुण मिलते हैं जो कॉन्फ़िगरेशन में सेटिंग्स से मेल खाते हैं

    public class ApplicationSettings
    {
        public string UrlBasePath { get; set; }
    }
  2. अपनी सेटिंग्स रजिस्टर करें

    public void ConfigureServices(IServiceCollection services)
    {
     ...
     services.Configure<ApplicationSettings>(Configuration.GetSection("ApplicationSettings"));
    ...
    }
  3. IOptions के माध्यम से इंजेक्ट करें

    public class HomeController
    {
       public HomeController(IOptions<ApplicationSettings> appSettings)
       { ...
        appSettings.Value.UrlBasePath
        ...
        // or better practice create a readonly private reference
        }
     }

मुझे यकीन नहीं है कि आप ऐसा क्यों नहीं करेंगे।


1
बस संदर्भ के लिए: docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/…
gatsby

2
सीधे एक कस्टम वर्ग में "appsettings.json" से मूल्यों का उपयोग कैसे करें?
तडेज

2
@JedatKinports आपको Nuget निर्भरताएं जोड़ने की आवश्यकता है Microsoft.Extensions.Configuration, Microsoft.Extensions.Configuration.Binderऔर Microsoft.Extensions.Configuration.Jsonफिर आप appsettings.jsonफ़ाइल को लोड करते हैं var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();.. और जैसे आपको appsettings.jsonआउटपुट निर्देशिका में प्रतिलिपि बनाना सुनिश्चित करना हैcopy always
LP13

7

configurationस्टार्टअप में स्थिर बनाने के लिए एक विकल्प भी है। ताकि आप इसे कहीं भी आसानी से एक्सेस कर सकें, स्थैतिक चर सुविधाजनक हैं हुह!

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

internal static IConfiguration Configuration { get; private set; }

यह Startup.Configuration.GetSection...क्या कहीं भी गलत हो सकता है का उपयोग कर विन्यास सुलभ बनाता है?


6

मैं इसे इस समय कर रहा हूँ:

// Requires NuGet package Microsoft.Extensions.Configuration.Json

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

namespace ImagesToMssql.AppsettingsJson
{
    public static class AppSettingsJson
    {           
        public static IConfigurationRoot GetAppSettings()
        {
            string applicationExeDirectory = ApplicationExeDirectory();

            var builder = new ConfigurationBuilder()
            .SetBasePath(applicationExeDirectory)
            .AddJsonFile("appsettings.json");

            return builder.Build();
        }

        private static string ApplicationExeDirectory()
        {
            var location = System.Reflection.Assembly.GetExecutingAssembly().Location;
            var appRoot = Path.GetDirectoryName(location);

            return appRoot;
        }
    }
}

और फिर मैं इसका उपयोग करता हूं जहां मुझे appsettings.json फ़ाइल से डेटा प्राप्त करने की आवश्यकता है:

var appSettingsJson = AppSettingsJson.GetAppSettings();
// appSettingsJson["keyName"]

3

मैंने विकल्प पैटर्न के नमूने को देखा और यह देखा:

public class Startup
{
    public Startup(IConfiguration config)
    {
        // Configuration from appsettings.json has already been loaded by
        // CreateDefaultBuilder on WebHost in Program.cs. Use DI to load
        // the configuration into the Configuration property.
        Configuration = config;
    }
...
}

जब मेरी कक्षा के निर्माता में Iconfiguration जोड़ रहा है, तो मैं DI के माध्यम से कॉन्फ़िगरेशन विकल्पों तक पहुंच सकता हूं।

उदाहरण:

public class MyClass{

    private Iconfiguration _config;

    public MyClass(Iconfiguration config){
        _config = config;
    }

    ... // access _config["myAppSetting"] anywhere in this class
}

क्या यह Startup.cs में MyClass का स्पष्ट उल्लेख किए बिना काम करता है, कुछ इस तरह से? services.AddTransient <MyClass> ();
द गॉडफादर

हां, वास्तव में, आपको उन कक्षाओं का उल्लेख करना चाहिए जिन्हें आप स्टार्टअप में जमा करना चाहते हैं। अन्य तरीके से नहीं। लेकिन IConfiguration मुझे लगता है कि डिफ़ॉल्ट रूप से पहले से ही इंजेक्शन के लिए उपलब्ध है।
पीटर हेमेरीक

हाँ यह काम करता है। मैंने टिप्पणी करने के बाद यह कोशिश की और विन्यास कार्यान्वयन को IConfiguration में इंजेक्ट किया गया। वैसे भी धन्यवाद :)
द गॉडफादर

1
@netfed जैसा कि मेयर स्पिट्जर ने अपने जवाब में कहा है, निश्चित रूप से आपको MyClass को स्टार्टअप से जोड़ने और जहां कहीं भी ज़रूरत हो उसे इंजेक्ट करने की आवश्यकता होगी, इसलिए आपको MyClass का एक नया उदाहरण स्वयं बनाने की आवश्यकता नहीं है, आप इसे जहाँ आपको ज़रूरत है, वहाँ इंजेक्ट करें।
पीटर हेमेरीक

2

मुझे पता है कि ऐसा करने के कई तरीके हो सकते हैं, मैं कोर 3.1 का उपयोग कर रहा हूं और इष्टतम / क्लीनर विकल्प की तलाश में था और मैंने इसे समाप्त कर दिया:

  1. मेरा स्टार्टअप क्लास जितना डिफॉल्ट है
public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
}
  1. मेरी appsettings.json इस तरह है
{
  "CompanySettings": {
    "name": "Fake Co"
  }
}
  1. मेरी कक्षा एक एपीआई नियंत्रक है, इसलिए पहले मैंने प्रयोग संदर्भ को जोड़ा और फिर IConfiguration इंटरफ़ेस को इंजेक्ट किया
using Microsoft.Extensions.Configuration;

public class EmployeeController 
{
    private IConfiguration _configuration;
    public EmployeeController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}
  1. अंत में मैंने गेटवैल्यू पद्धति का उपयोग किया
public async Task<IActionResult> Post([FromBody] EmployeeModel form)
{
    var companyName = configuration.GetValue<string>("CompanySettings:name");
    // companyName = "Fake Co"
}

0

8-2017 में Microsoft System.Configuration.NET CORE v4.4 के लिए बाहर आया । वर्तमान में v4.5 और v4.6 पूर्वावलोकन।

हममें से जो, .Net फ्रेमवर्क से CORE में परिवर्तन पर काम करते हैं, उनके लिए यह आवश्यक है। यह वर्तमान app.configफ़ाइलों को रखने और उपयोग करने की अनुमति देता है , जिसे किसी भी विधानसभा से एक्सेस किया जा सकता है। यह शायद एक विकल्प भी हो सकता हैappsettings.json , क्योंकि Microsoft को इसकी आवश्यकता का एहसास हुआ। यह एफडब्ल्यू में पहले की तरह ही काम करता है। एक अंतर है:

वेब अनुप्रयोगों में, [जैसे ASP.NET कोर वेब एपीआई] क्या आप उपयोग करने की आवश्यकता app.configहै और नहीं के लिए अपने web.config appSettingsया configurationSection। आपको web.configकेवल तभी उपयोग करने की आवश्यकता हो सकती है, जब आप IIS के माध्यम से अपनी साइट की तैनाती करते हैं। आप IIS- विशिष्ट सेटिंग्स में रखते हैंweb.config

मैंने इसे netstandard20 DLL और Asp.net Core Web Api के साथ परीक्षण किया है और यह सब काम कर रहा है।


0

ASP.NET Core में विकल्प पैटर्न का उपयोग करने का तरीका है। मैं बस जोड़ना चाहता हूं, अगर आपको अपने स्टार्टअप के भीतर विकल्पों तक पहुंचने की आवश्यकता है। तो मैं इसे इस तरह से करने की सलाह देता हूं:

CosmosDbOptions.cs:

public class CosmosDbOptions
{
    public string ConnectionString { get; set; }
}

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // This is how you can access the Connection String:
    var connectionString = Configuration.GetSection(nameof(CosmosDbOptions))[nameof(CosmosDbOptions.ConnectionString)];
}

इसलिए अगर मुझे एक दर्जन कॉन्फिग वैल्यू वाले पूरे सबसिनेशन पसंद हैं, जिन्हें मुझे कॉन्फिगरसर्विसेस में एक्सेस करने की आवश्यकता है, तो मुझे उन सभी के लिए यह करने की आवश्यकता है? क्या IOptions पैटर्न के माध्यम से ऐसा करने का कोई अन्य तरीका नहीं है? मुझे इसे एक स्थिर विस्तार विधि पर इंजेक्ट करने की आवश्यकता है जहां मैं अपने बड़े पारगमन बस को कॉन्फ़िगर कर रहा हूं। इसके अलावा Microsoft के इस सुझाव के बारे में क्या ConfigureServices docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/…
kuldeep

मैं यहां कॉन्फिगर्स सर्विस में IOPtions का उपयोग नहीं करता ...
मार्टिन

-3

मुझे स्टार्टअप द्वारा स्वयं के मापदंडों को पढ़ना है। WebHost शुरू होने से पहले
वहाँ होना चाहिए (जैसा कि मुझे "सुनने के लिए" url / IP और पोर्ट को पैरामीटर फ़ाइल से और WebHost पर लागू करना होगा)। इसके अलावा, मुझे सेटिंग सार्वजनिक करने की आवश्यकता है पूरे एप्लिकेशन में ।

कुछ समय के लिए खोज करने के बाद (कोई पूर्ण उदाहरण नहीं मिला, केवल स्निपेट्स) और विभिन्न कोशिश-और-त्रुटि के बाद, मैंने इसे "। पुराने तरीके से" .ini फ़ाइल के साथ करने का फैसला किया है।
इसलिए .. यदि आप अपना उपयोग करना चाहते हैं। अपनी .ini फ़ाइल और / या "अपने / अपने यूआरएल को सुनने के लिए" सेट करें और / या सेटिंग्स को सार्वजनिक करने की आवश्यकता है, यह आपके लिए है ...

पूरा उदाहरण, कोर 2.1 (mvc) के लिए मान्य:

Aini-file बनाएँ - उदाहरण:

[स्टार्टअप]
URL = http://172.16.1.201:22222
[पैरामीटर]
* Dummy1 = gew7623
Dummy1 = सच
Dummy2 = 1

जिससे डमीक्स केवल स्ट्रिंग के अलावा अन्य प्रकार के लिए उदाहरण के लिए शामिल है (और मामले को "गलत परम" (नीचे कोड देखें) का परीक्षण करने के लिए भी।

वैश्विक चर को संचित करने के लिए, परियोजना की जड़ में एक कोड फ़ाइल जोड़ी गई:

namespace MatrixGuide
{
    public static class GV
    {
        // In this class all gobals are defined

        static string _cURL;
        public static string cURL // URL (IP + Port) on that the application has to listen
        {
            get { return _cURL; }
            set { _cURL = value; }
        }

        static bool _bdummy1;
        public static bool bdummy1 // 
        {
            get { return _bdummy1; }
            set { _bdummy1 = value; }
        }

        static int _idummy1;
        public static int idummy1 // 
        {
            get { return _idummy1; }
            set { _idummy1 = value; }
        }

        static bool _bFehler_Ini;
        public static bool bFehler_Ini // 
        {
            get { return _bFehler_Ini; }
            set { _bFehler_Ini = value; }
        }

        // add further  GV variables here..
    }
    // Add further classes here... 
}

प्रोग्राम में कोड बदल दिया। (CreateWebHostBuilder () से पहले):

namespace MatrixGuide
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Read .ini file and overtake the contend in globale
            // Do it in an try-catch to be able to react to errors
            GV.bFehler_Ini = false;
            try
            {
                var iniconfig = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddIniFile("matrixGuide.ini", optional: false, reloadOnChange: true)
                .Build();
                string cURL = iniconfig.GetValue<string>("Startup:URL");
                bool bdummy1 = iniconfig.GetValue<bool>("Parameter:Dummy1");
                int idummy2 = iniconfig.GetValue<int>("Parameter:Dummy2");
                //
                GV.cURL = cURL;
                GV.bdummy1 = bdummy1;
                GV.idummy1 = idummy2;
            }
            catch (Exception e)
            {
                GV.bFehler_Ini = true;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("!! Fehler beim Lesen von MatrixGuide.ini !!");
                Console.WriteLine("Message:" + e.Message);
                if (!(e.InnerException != null))
                {
                    Console.WriteLine("InnerException: " + e.InnerException.ToString());
                }

                Console.ForegroundColor = ConsoleColor.White;
            }
            // End .ini file processing
            //
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>() //;
            .UseUrls(GV.cURL, "http://localhost:5000"); // set the to use URL from .ini -> no impact to IISExpress

    }
}

इस तरफ:

  • मेरा एप्लिकेशन कॉन्फिगरेशन appsettings.json से अलग हो गया है और मुझे डरने की कोई साइडफ़ेक्ट नहीं है, अगर एमएस भविष्य के संस्करणों में बदलाव करता है;;
  • वैश्विक चर में मेरी सेटिंग है
  • मैं प्रत्येक डिवाइस के लिए "सुनने के लिए url" सेट करने में सक्षम हूं, एप्लिकैटन रन ऑन (मेरी देव मशीन, इंट्रानेट सर्वर और इंटरनेट सर्वर)
  • मैं सेटिंग्स को निष्क्रिय करने में सक्षम हूं, पुराना तरीका (बस पहले एक सेट करें)
  • मैं प्रतिक्रिया करने में सक्षम हूँ, अगर कुछ गलत है। Ini फ़ाइल (जैसे टाइप मिसमैच)
    अगर - उदाहरण के लिए - एक गलत प्रकार सेट है (जैसे * डमी 1 = gew7623 डमी 1 = सत्य के बजाय सक्रिय है) होस्ट को लाल किया जा सकता है कंसोल पर जानकारी (अपवाद सहित) और मैं अनुप्रयोग में भी प्रतिक्रिया करने में सक्षम हूं (GV.bFehler_Ini ist के लिए सही है, अगर .ini के साथ त्रुटियां हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.