.NET কোর এ সংযোগের স্ট্রিংটি কীভাবে পড়বেন?


108

আমি একটি কনফিগারেশন ফাইল থেকে কেবল একটি সংযোগ স্ট্রিং পড়তে চাই এবং এর জন্য আমার প্রকল্পে "appsettings.json" নামের একটি ফাইল যুক্ত করতে এবং এতে এই লিখিত সামগ্রী যুক্ত করতে চাই:

{
"ConnectionStrings": {
  "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-

 WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
    "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
    "Default": "Debug",
    "System": "Information",
    "Microsoft": "Information"
   }
 }
}

এএসপি.নেটে আমি এটি ব্যবহার করেছি:

 var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

এখন আমি কীভাবে সি # তে "ডিফল্ট সংযোগ" পড়তে পারি এবং। নেট কোর এ স্ট্রিং ভেরিয়েবল এ সঞ্চয় করতে পারি?


উত্তর:


101

আপনি এটি getConnicationString এক্সটেনশন-পদ্ধতি দিয়ে করতে পারেন:

string conString = Microsoft
   .Extensions
   .Configuration
   .ConfigurationExtensions
   .GetConnectionString(this.Configuration, "DefaultConnection");

System.Console.WriteLine(conString);

বা ডিআই এর জন্য একটি কাঠামোগত শ্রেণীর সাথে:

public class SmtpConfig
{
    public string Server { get; set; }
    public string User { get; set; }
    public string Pass { get; set; }
    public int Port { get; set; }
}

প্রারম্ভ:

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)
{
    // http://developer.telerik.com/featured/new-configuration-model-asp-net-core/
    // services.Configure<SmtpConfig>(Configuration.GetSection("Smtp"));
    Microsoft.Extensions.DependencyInjection.OptionsConfigurationServiceCollectionExtensions.Configure<SmtpConfig>(services, Configuration.GetSection("Smtp"));

এবং তারপরে হোম-কন্ট্রোলারে:

public class HomeController : Controller
{

    public SmtpConfig SmtpConfig { get; }
    public HomeController(Microsoft.Extensions.Options.IOptions<SmtpConfig> smtpConfig)
    {
        SmtpConfig = smtpConfig.Value;
    } //Action Controller


    public IActionResult Index()
    {
        System.Console.WriteLine(SmtpConfig);
        return View();
    }

অ্যাপসেটেটিংস.জেএসনে এটি সহ:

"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true"
},

"Smtp": {
    "Server": "0.0.0.1",
    "User": "user@company.com",
    "Pass": "123456789",
    "Port": "25"
  }

9
Configureএটি একটি এক্সটেনশন পদ্ধতি। এটি services.Configure<SmtpConfig>(Configuration.GetSection("Smtp"));এটিকে সাধারণভাবে ব্যবহার করা উচিত: অবশ্যই, এটি অনেকটা একই জিনিস, তবে আমি মনে করি যে অবহেলিত লোকেরা কেবল এটির জন্য "ভুল" পদ্ধতিটি শুরু করবে, বিনা বিভাগে লাইনটি ব্যবহার করে, তাই সম্ভবত লাইনটি সরিয়ে ফেলা ভাল। ;)
জেমস উইলকিন্স

@ জেমস উইলকিনস: অত্যন্ত বৈধ উদ্বেগ। যাইহোক, আমি আসলে এটি চিহ্নিতকরণটিকে এক্সটেনশন পদ্ধতি হিসাবে ব্যবহার করার চেয়ে পছন্দ করি - এইভাবে আমি জানি কোথায় কোথায় চলছে এবং 1 টি জায়গা থেকে অন্য জায়গায় অনুলিপি করতে পারি, ইমপোর্ট নেমস্পেসগুলি হারিয়ে যাওয়ার কারণে সমস্যা না পেয়ে। একমাত্র সমস্যাটি হ'ল এমএস নাম সংঘর্ষ প্রতিরোধের পরিবর্তে কর বিভাগের জন্য নেমস্পেস ব্যবহার করে - কারণ, নামস্থানগুলি দীর্ঘ long এছাড়াও, আপনি যদি নামস্পেসগুলি সরিয়ে ফেলে এবং এক্সটেনশন পদ্ধতিগুলি ব্যবহার করেন তবে একই ধরণের লোকেরা কোডটি সংকলন না করার বিষয়ে অভিযোগ শুরু করবে। প্রত্যেকে আইডিই ব্যবহার করে না, সুতরাং এইভাবে ভাল।
স্টিফান স্টেইগার

3
@ জেদাতকিনপোর্টস: না, কেবল ইনজেকশন। এমনকি আপনি যদি স্থির পদ্ধতি লিখতে চান তবে আপনার কনফিগারেশনটি এখনও প্রয়োজন। যদিও আপনি ম্যানুয়ালি একটি JSON / YAML ফাইলটি পড়তে পারেন। তবে এটি ওভাররাইটগুলি মুছে ফেলবে, যেমন ব্যবহারকারীদের বা অন্যদের (যেমন রেজিস্ট্রি থেকে কনফিগারেশন)।
স্টেফান স্টেইগার

1
আমি একটি ত্রুটি পাচ্ছি: "মাই ক্লাসে 'কনফিগারেশন' ... এর সংজ্ঞা রয়েছে ..."
রবার্ট স্মিথ

3
সংযোগের স্ট্রিং অংশে উল্লেখ করে "এটি. কনফিগারেশন" কী? গেটকনেকশনস্ট্রিং (এটি on কনফিগারেশন, "ডিফল্ট সংযোগ")
এমসি 9000

111

পোস্ট করা উত্তরটি ঠিক আছে তবে সংযোগের স্ট্রিংয়ে পড়ার বিষয়ে আমার যে একই প্রশ্নের উত্তর ছিল তা সরাসরি উত্তর দেয়নি। অনেক অনুসন্ধানের মাধ্যমে আমি এটি করার কিছুটা সহজ উপায় খুঁজে পেয়েছি।

স্টার্টআপ.স.

public void ConfigureServices(IServiceCollection services)
{
    ...
    // Add the whole configuration object here.
    services.AddSingleton<IConfiguration>(Configuration);
}

আপনার নিয়ামকটিতে কনফিস্টারের জন্য একটি ক্ষেত্র এবং এটির জন্য একটি প্যারামিটার যুক্ত করুন

private readonly IConfiguration configuration;

public HomeController(IConfiguration config) 
{
    configuration = config;
}

এখন পরে আপনার ভিউ কোডে আপনি এটির মতো অ্যাক্সেস করতে পারবেন:

connectionString = configuration.GetConnectionString("DefaultConnection");

2
এমনটা করতো না। আপনি যদি সত্তা কাঠামো ব্যতীত কাজ করেন তবে আপনি সংযোগ কারখানাটি সিঙ্গেলটন হিসাবে নিবন্ধিত করুন, উদাহরণস্বরূপ ড্যাপারের সাথে ব্যবহার করতে। তারপরেও আপনার যদি প্রয়োজন হয় তবে আপনি কোনও সংযোগের স্ট্রিং সম্পত্তি প্রকাশ করতে পারেন তবে আমি বাজি দিয়েছি যে এটি 99% ক্ষেত্রে প্রয়োজন হবে না।
স্টিফান স্টেইগার

2
তবে কন্ট্রোলারের পরিবর্তে মডেলগুলিতে কনফিগারেশন অ্যাক্সেস করবেন কীভাবে?
তন্ময়

2
আমি যত বেশি জিনিস পড়ি এবং চেষ্টা করি, ততই আমি উপলব্ধি করি যে সংযোগের স্ট্রিং পাওয়া একটি বড় উদ্যোগ is আমি চেষ্টা করি না কেন আমি কেবল নালাগুলি পাই।
এমসি 9000

7
হ্যাঁ। "হ্যালো ওয়ার্ল্ড" বলতে প্রচুর কম্পিউটার বিজ্ঞানী বিশাল উচ্চ ঝুলন্ত ফল তৈরি করছেন। অবিশ্বাস্য. এন্ট্রপি এটি সেরা।
জাস্টজহান

2
@ জাস্টজাহান: আমি আপনার অভিযোগ বুঝতে পারি, তবে সঠিক নকশা পরীক্ষাযোগ্য এবং এর অর্থ আপনাকে নির্মাতার উপর নির্ভরতা পার করতে হবে, অন্যথায় আপনার আবেদন / কাঠামোটি একক পরীক্ষার যোগ্য নয়। এটি যথাযথ নকশা, কারণ আপনি পুরো কোডটি পুরোপুরি পরিবর্তন না করেই কেবল একটি উপাদানকে অন্যটির সাথে প্রতিস্থাপন করতে পারেন। আপনি যদি 100 টি যুক্তি চারপাশে পাস করতে না চান, আপনি ক্লাসে সিস্টেম.আইএসভিয়ারপ্রাইডারটি পাস করতে পারেন তবে আপনি সেখানে নির্ভরতা আনতে পারেন। মুদ্রার অন্য দিকটি হ'ল এটি যুক্ত হওয়া জটিলতার সাথে আসে।
স্টিফান স্টেইগার

18

আরও তথ্যের জন্য লিঙ্কটি দেখুন: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-strings

তাদেরকে JSON

    {
      "ConnectionStrings": {
        "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
      },
    }

সি # স্টার্টআপ.সি

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}

সম্পাদনা: এসপনেটকোর, ৩.১ শুরু: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configration/?view=aspnetcore-3.1


JSON ফাইলের ConnectionStringsপরিবর্তে কেন থাকা উচিত ConnectionString? কারণ যখন আমি ব্যবহার করেছি ConnectionString, তখন আমরা নালু হয়ে যাচ্ছি।
বিজয়

@ বিজয় তখন নির্ধারিত পদ্ধতিটি ব্যবহার করে দেখুন;) দয়া করে সংযুক্ত লিঙ্কটি দেখুন।
মার্কোকস্টেট

1
এই পদ্ধতিটি Microsoft.Extensions.Configuration(3.1.5) তারিখের
পুরানো

7

এটি সমাধান করার জন্য আমি যেভাবে খুঁজে পেয়েছি তা হ'ল স্টার্টআপের কোনও বিল্ডারে অ্যাডজসনফায়াল ব্যবহার করা (এটি এটি অ্যাপসেটেটিংস.জসন ফাইলে সংরক্ষিত কনফিগারেশনটি সন্ধান করার অনুমতি দেয়) এবং তারপরে একটি ব্যক্তিগত _কনফিগ ভেরিয়েবল সেট করতে ব্যবহার করুন

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)
            .AddEnvironmentVariables();
        _config = builder.Build();
    }

এবং তারপরে আমি কনফিগারেশন স্ট্রিংটি নীচে সেট করতে পারলাম:

var connectionString = _config.GetConnectionString("DbContextSettings:ConnectionString"); 

এটি ডটনেট কোর 1.1 এ রয়েছে


5
আমি কীভাবে আমার নিয়ন্ত্রণে _ কনফিগ অ্যাক্সেস করতে পারি?
রোদ

এটি স্টার্টআপ.সি.সে কনফিগার সার্ভিসে ডিআই পাত্রে যুক্ত করে।
স্টিফান স্টেইগার

3

এএসপি.নেট কোর ( আমার ক্ষেত্রে ৩.১ ) কন্ট্রোলারগুলিতে কন্সট্রাক্টর ইনজেকশন সরবরাহ করে , যাতে আপনি কেবল নিম্নলিখিত কন্সট্রাক্টর যুক্ত করতে পারেন:

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    private readonly IConfiguration m_config;

    public TestController(IConfiguration config)
    {
        m_config = config;
    }

    [HttpGet]
    public string Get()
    {
        //you can get connection string as follows
        string connectionString = m_config.GetConnectionString("Default")
    }
}

এখানে অ্যাপসেটেটিংস.জেসন দেখতে কেমন হতে পারে:

{
    "ConnectionStrings": {
        "Default": "YOUR_CONNECTION_STRING"
        }
}

0

আরও একটি পদ্ধতি আছে। আমার উদাহরণে আপনি এপিএস। নেট এমভিসি কোর ৩.১-এ নির্ভরতা ইনজেকশনের সাহায্যে সংগ্রহস্থল শ্রেণিতে কিছু ব্যবসায়িক যুক্তি দেখতে পান।

এবং এখানে আমি connectiongStringসেই ব্যবসায়িক যুক্তিটি পেতে চাই কারণ সম্ভবত অন্য সংগ্রহস্থলটিতে অন্য একটি ডেটাবেজে অ্যাক্সেস থাকবে।

এই নিদর্শনটি আপনাকে একই ব্যবসায়িক লজিক ভাণ্ডারে বিভিন্ন ডেটাবেজে অ্যাক্সেসের অনুমতি দেয়।

সি শার্প

public interface IStatsRepository
{
            IEnumerable<FederalDistrict> FederalDistricts();
}

class StatsRepository : IStatsRepository
{
   private readonly DbContextOptionsBuilder<EFCoreTestContext>
                optionsBuilder = new DbContextOptionsBuilder<EFCoreTestContext>();
   private readonly IConfigurationRoot configurationRoot;

   public StatsRepository()
   {
       IConfigurationBuilder configurationBuilder = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
           .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
       configurationRoot = configurationBuilder.Build();
   }

   public IEnumerable<FederalDistrict> FederalDistricts()
   {
        var conn = configurationRoot.GetConnectionString("EFCoreTestContext");
        optionsBuilder.UseSqlServer(conn);

        using (var ctx = new EFCoreTestContext(optionsBuilder.Options))
        { 
            return ctx.FederalDistricts.Include(x => x.FederalSubjects).ToList();
        }
    }
}

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "EFCoreTestContext": "Data Source=DESKTOP-GNJKL2V\\MSSQLSERVER2014;Database=Test;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

-1

আমার কাছে একটি ডেটা অ্যাক্সেস লাইব্রেরি রয়েছে যা। নেট কোর এবং। নেট ফ্রেমওয়ার্ক উভয়ের সাথেই কাজ করে।

কৌতুকটি ছিল "অ্যাপ.config" নামের একটি এক্সএমএল ফাইলের (ওয়েব প্রকল্পের জন্য) সংযোগের স্ট্রিংগুলি রাখার জন্য নেট কোর প্রকল্পগুলিতে এবং এটি 'আউটপুট ডিরেক্টরিতে অনুলিপি' হিসাবে চিহ্নিত করুন,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="conn1" connectionString="...." providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

কনফিগারেশন ম্যানেজআর সংযোগসট্রিংস - সংযোগ স্ট্রিং পড়বে।

    var conn1 = ConfigurationManager.ConnectionStrings["conn1"].ConnectionString;

আপনি যদি .NET কোর ব্যবহার করছেন তবে .NET ফ্রেমওয়ার্ক প্যাটার্নে জুতো মজাদার পরিবর্তে এর কনফিগারেশন ধরণটি গ্রহণ করা ভাল।
Simmetric

-2

আপনি কনফিগারেশন এক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন: getConnectionString ("DefaultConnication")

https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/Extensions/Configuration/ConfigurationExtensions/index.html#Microsoft.Extensions.Configuration.ConfigurationExtensions.GetConnectionString


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