। নেট কোর 3 কর্মী পরিষেবাতে কীভাবে অ্যাপ সেটিংস সেটআপ করবেন


22

আমি নেট কোর 3 এ অ্যাপসেটেটিংস.জসন পড়ার বিষয়ে অনেক টিউটোরিয়াল এবং এসও প্রশ্ন (যেমন অ্যাপ্লিকেশন সেটিংস। নেট কোর ) এর দিকে নজর রেখেছি এবং কর্মী পরিষেবাদির সাথে ডিল করার সময় কীভাবে করা যায় সে সম্পর্কে আমি কোনও পয়েন্টার পাই না। কোনও স্টার্টআপ পদ্ধতি নেই। পরিবর্তে, আমার কাছে প্রধান পদ্ধতি সহ একটি প্রোগ্রাম.সি রয়েছে:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
}

নেট নেট 3-তে ওয়ার্কার সার্ভিস প্রজেক্টে অ্যাপসেটেটিংস.জসন ফাইল থেকে পড়া সম্পর্কে আমি কীভাবে যেতে পারি?

আমি .Net v4.8 এর সাথে তৈরি কাস্টম ডাব্লুসিএফ ক্লায়েন্টের সাথে একটি রেফারেন্স যুক্ত করেছি এবং অন্য একটি প্রকল্প যা পুরো সমাধানের মধ্যে সবেমাত্র সমস্ত বুসাইনস ডোমেন অবজেক্ট শেয়ার করেছে। আমার সমাধানটি প্রাথমিকভাবে। নেট v4.8 এবং আমি কর্মী পরিষেবাটি ব্যবহার করতে চাই। ক্লায়েন্ট প্রকল্পটি কোড দ্বারা অভ্যন্তরীণভাবে একটি ডাব্লুসিএফ ক্লায়েন্ট তৈরি করে যাতে সমস্ত বাঁধাই এবং শেষ পয়েন্টগুলি কনফিগারযোগ্য। যদি এটি একটি নেট নেট 4.৮.৮ প্রকল্প হয় তবে আমি নিম্নলিখিতটি অ্যাপকনফাইগে যুক্ত করব:

<appSettings>
    ...
    <add key="AminServiceUri" value="http://localhost:45108/ServiceHost/v1/AminService.svc" />
    <add key="BillServiceUri" value="http://localhost:45108/ServiceHost/v1/BillService.svc" />
    <add key="CustomerServiceUri" value="http://localhost:45108/ServiceHost/v1/CustomerService.svc" />
    <add key="EpayServiceUri" value="http://localhost:45108/ServiceHost/v1/EpayService.svc" />
    <add key="FinanceServiceUri" value="http://localhost:45108/ServiceHost/v1/FinanceService.svc" />
    <add key="GrpServiceUri" value="http://localhost:45108/ServiceHost/v1/GrpService.svc" />
    <add key="MetaServiceUri" value="http://localhost:45108/ServiceHost/v1/MetaService.svc" />
    <add key="ReportServiceUri" value="http://localhost:45108/ServiceHost/v1/ReportService.svc" />
    <add key="ServiceInfoServiceUri" value="http://localhost:45108/ServiceHost/v1/ServiceInfoService.svc" />
    <add key="UsersServiceUri" value="http://localhost:45108/ServiceHost/v1/UsersService.svc" />
    ...
    <add key="ExcessiveLogging" value="false" />
    ...
</appSettings>

এখন নতুন JSON ফর্ম্যাটে থাকা এবং সেগুলি পড়তে আমার এই সেটিংসের দরকার need

সম্পাদন করা

এটি একটি নতুন প্রকল্প। শ্রমিক কিছু করছে না:

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> logger;

    public Worker(ILogger<Worker> logger)
    {
        this.logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(5000, stoppingToken);
        }
    }
}

এবং এখানে আমি কীভাবে এই প্রকল্পের ধরণটি পাই:

কর্মী পরিষেবা

উত্তর:


36

উদাহরণস্বরূপ যদি শ্রমিক শ্রেণীর আপনার অ্যাপসেটে থাকা কিছু ডেটা অ্যাক্সেসের প্রয়োজন হয়

public class Worker : BackgroundService {
    private readonly ILogger<Worker> logger;
    private readonly WorkerOptions options;

    public Worker(ILogger<Worker> logger, WorkerOptions options) {
        this.logger = logger;
        this.options = options;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken) {
        while (!stoppingToken.IsCancellationRequested) {
            //do something that uses options

            logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(5000, stoppingToken);
        }
    }
}

WorkerOptionsকনফিগারেশন থেকে যেখানে আপনার মান সংরক্ষণ করে।

public class WorkerOptions {
    public string AminServiceUri { get; set; }
    public string BillServiceUri { get; set; }

    //... other properties
}

যা ধরে নিয়েছে অ্যাপসেটেটিংস.জসন ফাইলটির সংশ্লিষ্ট কী রয়েছে

{
  "WCF": {
    "AminServiceUri":"http://localhost:45108/ServiceHost/v1/AminService.svc",
    "BillServiceUri":"http://localhost:45108/ServiceHost/v1/BillService.svc",

    //...other key-value pairs
  },
  "Logging": {
    "ExcessiveLogging": false
  }

}

ডিফল্টরূপে Host.CreateDefaultBuilderসাধারণ কনফিগারেশন সেট করা হবে (appsettings.json এবং অন্যান্য)।

ব্যবহারের hostContext.Configurationপেতে IConfigurationউদাহরণস্বরূপ যে আকাঙ্ক্ষিত সেটিংস অ্যাক্সেস এবং এটি জন্য শক্তিশালী ভাবে টাইপ অবজেক্ট মডেল যোগ করার জন্য ব্যবহার করা যাবে। পরিষেবা সংগ্রহের মধ্যে সেই অবজেক্টটি যুক্ত করুন যাতে এটি যেখানে প্রয়োজন হয় সেখানে ইনজেকশন দেওয়া যায়

উদাহরণ স্বরূপ

public class Program {
    public static void Main(string[] args) {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) => {
                IConfiguration configuration = hostContext.Configuration;

                WorkerOptions options = configuration.GetSection("WCF").Get<WorkerOptions>();

                services.AddSingleton(options);

                services.AddHostedService<Worker>();
            });
}

যখন কর্মী তৈরি করা হচ্ছে তখন এটি এর প্রয়োজনীয় নির্ভরতাগুলির সাথে ইঞ্জেকশন করা হবে।

এএসপি.নেট কোর রেফারেন্স কনফিগারেশন


এই উত্তর তাই নিখুঁত। এটি অ্যাপ্লিকেশন-সেটিংস থেকে ডেটা পড়ার সঠিক উপায় সরবরাহ করে।
বিঘ্নেশ

আপনি IConfigurationএকটি কাস্টম ক্লাস তৈরি করার পরিবর্তে ব্যবহার করতে পারেন
শিমোন লেবোভিটস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.