আপনি যদি নীচের মত একটি কাস্টম কনফিগারেশন বিভাগ খুঁজছেন
<CustomApplicationConfig>
<Credentials Username="itsme" Password="mypassword"/>
<PrimaryAgent Address="10.5.64.26" Port="3560"/>
<SecondaryAgent Address="10.5.64.7" Port="3570"/>
<Site Id="123" />
<Lanes>
<Lane Id="1" PointId="north" Direction="Entry"/>
<Lane Id="2" PointId="south" Direction="Exit"/>
</Lanes>
</CustomApplicationConfig>
তারপরে আপনি কনফিগারেশন বিভাগটির আমার বাস্তবায়নটি ব্যবহার করতে পারেন যাতে System.Configuration
আপনার প্রকল্পে সমাবেশ রেফারেন্স যুক্ত শুরু করতে পারেন
আমি যে প্রতিটি নেস্টেড উপাদানগুলি ব্যবহার করেছি সেটির দিকে নজর দিন, প্রথমটি হ'ল দুটি বৈশিষ্ট্যযুক্ত শংসাপত্র যাতে প্রথমে এটি যুক্ত করা যাক
শংসাপত্র উপাদান
public class CredentialsConfigElement : System.Configuration.ConfigurationElement
{
[ConfigurationProperty("Username")]
public string Username
{
get
{
return base["Username"] as string;
}
}
[ConfigurationProperty("Password")]
public string Password
{
get
{
return base["Password"] as string;
}
}
}
প্রাথমিক এজেন্ট এবং মাধ্যমিক এজেন্ট
উভয়েরই একই বৈশিষ্ট্য রয়েছে এবং প্রাথমিক এবং একটি ব্যর্থভারের জন্য সার্ভারের সেটগুলির ঠিকানার মতো মনে হয়, সুতরাং আপনাকে কেবল নিম্নলিখিত দুটি ব্যক্তির জন্য একটি উপাদান শ্রেণি তৈরি করতে হবে
public class ServerInfoConfigElement : ConfigurationElement
{
[ConfigurationProperty("Address")]
public string Address
{
get
{
return base["Address"] as string;
}
}
[ConfigurationProperty("Port")]
public int? Port
{
get
{
return base["Port"] as int?;
}
}
}
আমি এই পোস্টে পরে একটি শ্রেণীর সাথে কীভাবে দুটি পৃথক উপাদান ব্যবহার করব তা ব্যাখ্যা করব, আসুন সাইট আইড এড়িয়ে চলুন কারণ এতে কোনও পার্থক্য নেই। আপনাকে কেবলমাত্র একটি সম্পত্তি দিয়ে উপরের মত একটি শ্রেণি তৈরি করতে হবে। লেনস সংগ্রহটি কীভাবে কার্যকর করা যায় তা আমাদের দেখুন
এটি দুটি অংশে বিভক্ত হয় প্রথমে আপনাকে একটি উপাদান বাস্তবায়ন শ্রেণি তৈরি করতে হবে তারপরে আপনাকে সংগ্রহ উপাদান উপাদান তৈরি করতে হবে
LaneConfigElement
public class LaneConfigElement : ConfigurationElement
{
[ConfigurationProperty("Id")]
public string Id
{
get
{
return base["Id"] as string;
}
}
[ConfigurationProperty("PointId")]
public string PointId
{
get
{
return base["PointId"] as string;
}
}
[ConfigurationProperty("Direction")]
public Direction? Direction
{
get
{
return base["Direction"] as Direction?;
}
}
}
public enum Direction
{
Entry,
Exit
}
আপনি খেয়াল করতে পারেন যে এর একটি বৈশিষ্ট্য LanElement
হল একটি এনুমুরেশন এবং আপনি যদি কনফিগারেশনের অন্য কোনও মান ব্যবহার করার চেষ্টা করেন যা গণনা অ্যাপ্লিকেশনটিতে সংজ্ঞায়িত করা হয় না তবে System.Configuration.ConfigurationErrorsException
এটি প্রারম্ভকালে একটি নিক্ষেপ করবে । ঠিক আছে সংগ্রহ সংজ্ঞাতে এগিয়ে চলুন
[ConfigurationCollection(typeof(LaneConfigElement), AddItemName = "Lane", CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class LaneConfigCollection : ConfigurationElementCollection
{
public LaneConfigElement this[int index]
{
get { return (LaneConfigElement)BaseGet(index); }
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
public void Add(LaneConfigElement serviceConfig)
{
BaseAdd(serviceConfig);
}
public void Clear()
{
BaseClear();
}
protected override ConfigurationElement CreateNewElement()
{
return new LaneConfigElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((LaneConfigElement)element).Id;
}
public void Remove(LaneConfigElement serviceConfig)
{
BaseRemove(serviceConfig.Id);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(String name)
{
BaseRemove(name);
}
}
আপনি খেয়াল করতে পারেন যে আমি AddItemName = "Lane"
আপনার সংগ্রহ এন্ট্রি আইটেমটির জন্য আপনি যা পছন্দ করতে পারেন তা চয়ন করতে পারেন, আমি ডিফল্টটিকে "যুক্ত" ব্যবহার করতে পছন্দ করি তবে আমি কেবল এই পোস্টের স্বার্থে এটি পরিবর্তন করেছি।
এখন আমাদের নেস্টেড এলিমেন্টগুলির সবগুলি কার্যকর করা হয়েছে এখন আমাদের ক্লাসে যারা বাস্তবায়ন করতে হবে তাদের সকলকে একত্রিত করা উচিত System.Configuration.ConfigurationSection
CustomApplicationConfigSection
public class CustomApplicationConfigSection : System.Configuration.ConfigurationSection
{
private static readonly ILog log = LogManager.GetLogger(typeof(CustomApplicationConfigSection));
public const string SECTION_NAME = "CustomApplicationConfig";
[ConfigurationProperty("Credentials")]
public CredentialsConfigElement Credentials
{
get
{
return base["Credentials"] as CredentialsConfigElement;
}
}
[ConfigurationProperty("PrimaryAgent")]
public ServerInfoConfigElement PrimaryAgent
{
get
{
return base["PrimaryAgent"] as ServerInfoConfigElement;
}
}
[ConfigurationProperty("SecondaryAgent")]
public ServerInfoConfigElement SecondaryAgent
{
get
{
return base["SecondaryAgent"] as ServerInfoConfigElement;
}
}
[ConfigurationProperty("Site")]
public SiteConfigElement Site
{
get
{
return base["Site"] as SiteConfigElement;
}
}
[ConfigurationProperty("Lanes")]
public LaneConfigCollection Lanes
{
get { return base["Lanes"] as LaneConfigCollection; }
}
}
এখন আপনি দেখতে পাচ্ছেন যে নামের সহ আমাদের দুটি সম্পত্তি রয়েছে PrimaryAgent
এবং SecondaryAgent
উভয়েরই একই ধরণের রয়েছে এখন আপনি সহজেই বুঝতে পারবেন কেন আমাদের এই দুটি উপাদানটির বিরুদ্ধে কেবল একটি বাস্তবায়ন শ্রেণি ছিল।
আপনি নতুনভাবে উদ্ভাবিত কনফিগারেশন বিভাগটি আপনার অ্যাপ্লিকেশনটিতে ব্যবহার করার আগে আপনাকে নিজের অ্যাপ্লিকেশনটি বলতে হবে যে আপনি নিজের কনফিগারেশন বিভাগটি আবিষ্কার করেছেন এবং কিছুটা শ্রদ্ধা জানান, আপনাকে নিম্নলিখিত লাইন যুক্ত করতে হবে app.config এ (রুট ট্যাগ শুরুর ঠিক পরে হতে পারে)।
<configSections>
<section name="CustomApplicationConfig" type="MyNameSpace.CustomApplicationConfigSection, MyAssemblyName" />
</configSections>
দ্রষ্টব্য: মায়াস্প্যাশনের নাম .dll ছাড়াই হওয়া উচিত যেমন যদি আপনার অ্যাসেম্বলি ফাইলের নাম myDll.dll হয় তবে myDll.dll এর পরিবর্তে myDll ব্যবহার করুন
এই কনফিগারেশনটি পুনরুদ্ধার করতে আপনার অ্যাপ্লিকেশনটিতে যে কোনও জায়গায় কোডের নীচের লাইনটি ব্যবহার করুন
CustomApplicationConfigSection config = System.Configuration.ConfigurationManager.GetSection(CustomApplicationConfigSection.SECTION_NAME) as CustomApplicationConfigSection;
আমি আশা করি উপরের পোস্টটি আপনাকে কিছুটা জটিল ধরণের কাস্টম কনফিগার বিভাগগুলির সাথে শুরু করতে সহায়তা করবে।
শুভ কোডিং :)
**** সম্পাদনা করুন **** LaneConfigCollection
আপনাকে লিনিক্যু সক্ষম করতে কার্যকর করতে হবেIEnumerable<LaneConfigElement>
এবং নিম্নলিখিত বাস্তবায়ন যুক্ত করুন GetEnumerator
public new IEnumerator<LaneConfigElement> GetEnumerator()
{
int count = base.Count;
for (int i = 0; i < count; i++)
{
yield return base.BaseGet(i) as LaneConfigElement;
}
}
যারা এখনও সম্পর্কে বিভ্রান্ত জন্য কিভাবে ফলন সত্যিই পড়া কাজ করে এই চমৎকার নিবন্ধ
উপরের নিবন্ধ থেকে নেওয়া দুটি মূল পয়েন্ট
এটি সত্যই পদ্ধতিটির কার্যকারিতা শেষ করে না। ফলন ফেরত পদ্ধতিটির কার্যনির্বাহীকরণকে বিরতি দেয় এবং পরের বার আপনি যখন এটিকে ডাকবেন (পরবর্তী অঙ্কের মানের জন্য), পদ্ধতিটি সর্বশেষ ফলন রিটার্ন কল থেকে চালিয়ে যেতে থাকবে। আমার মনে হয় এটি কিছুটা বিভ্রান্তিকর মনে হচ্ছে ... (শাই ফ্রেডম্যান)
ফলন। নেট রানটাইমের কোনও বৈশিষ্ট্য নয়। এটি কেবলমাত্র একটি সি # ভাষার বৈশিষ্ট্য যা সি # সংকলক দ্বারা সাধারণ আইএল কোডে সংকলিত হয়। (লার্স কর্নেলিয়াসেন)