புள்ளிவலை

மூளைக்குத் தீனியில்லாத போழ்து
சிறிது மனதுக்கும் ஈயப்படும்.
posts - 23, comments - 60, trackbacks - 0

web.configல் ஃபங்ஷன் பெயரைக் குறிப்பிடல்

உள்ளமைக்கோப்பில் (கான்ஃபிகரேஷன் ஃபைல்)  இயங்குச்சூழலுக்குத் தகுந்தாற்போல் மாற்றி பயன்படுத்தவேண்டிய விவரங்களை பண்பு/மதிப்பு (கீ/வேல்யூ) அடிப்படையில் சேமித்து வைத்து, System.Configuration.ConfigurationSettings.AppSettings மூலமாக இயங்குநேரத்தில் பெற்றுக்கொள்ளலாம். இப்படி பெறப்படும் மதிப்பு ஒரு துணைநிரலின் பெயரென்றால் அந்த துணைநிரலை அழைக்க வேண்டிய தேவை எனக்கு வந்தது.

அதாவது,

< add key="FunctionName" value="myfunction1" />

என்று உள்ளமைக்கோப்பில் இருந்தால், ஒரு குறிப்பிட்ட classல் இருக்கும் myfunction1 என்ற துணைநிரலை அழைக்கவேண்டும்.

மென்பொருள் மேம்பாட்டுப் நிறுவல் ஒன்றில் தகவல்தள மாற்றங்கள் சில செய்யவேண்டியதால் இப்படிச் ஒரு முறையைக் கையாள வேண்டி வந்தது. நிறுவுநிரலிலேயே பயனரிடமிருந்து தகவல்தள விவரங்களை வாங்கி இப்படியான மாற்றங்களைச் செய்யலாம்தான். ஆனால் இந்த குறிப்பிட்ட மென்பொருள் பல தகவல் தளங்களைப் பயன்படுத்தும் சாத்தியமுடையது. ஒவ்வொரு சமயமும் ஒவ்வொரு தகவல் தளத்துடன் தொடர்பு ஏற்படுத்தி இயங்கும் நிரலாதலால், அத்தனை தகவல்தளங்களைப் பற்றிய விவரங்களும் ஒரே நேரத்தில் பயனரிடமிருந்து வாங்குவது சற்று சுற்றுவேலை.

இயங்குநேரத்தில் துணைநிரலின் பெயர் என்று யோசித்ததுமே நினைவுக்கு வருவது delegates. ஆனால் டெலிகேட்ஸ் பயன்படுத்துவதற்கு துணைநிரலின் பெயர் இயக்கநேரத்திற்கு முன்பே தெரியவேண்டும்.

எனவே, உள்ளமைக்கோப்பில் நிறுவும்போது இந்த ஃபங்க்ஷனின் பெயரைக் குறிப்பிட்டு விட்டு முதல் முறை இயங்கும் போது மட்டும் இந்த ஃபங்க்ஷன் அழைக்கப்படுமாறு பார்த்துக்கொள்ள வேண்டும். இரண்டாம் முறை இந்த மென்பொருள் இயங்கும்போது FunctionName என்ற பண்பு உள்ளமைக்கோப்பில் இல்லாமல் செய்துவிட வேண்டும்.

public ClassConstructor()
{
//இதர நிரல்வரிகள்
  if(System.Configuration.ConfigurationSettings.AppSettings["FunctionName"]!=null)
  {
   Type tp = Type.GetType("Namespace.clsUpgrader");
   System.Reflection.MethodInfo objMethodInfo = tp.GetMethod(System.Configuration.ConfigurationSettings.AppSettings["FunctionName"].ToString());
   if(objMethodInfo == null)
   {
   //MessageBox.Show("Invalid method name");
   }
   else
   {
   objMethodInfo.Invoke(new Namespace.clsUpgrader(), new object[]{});
   }
   System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); //A reference to app.config/web.config.
   xml.Load(Application.ExecutablePath + ".config"); //the current application's configuration file is loaded. இணைய அடிப்படையிலான மென்பொருள் என்றால் Server.MapPath கொடுத்து web.config என்று கொடுத்துக்கொள்ளலாம்
   System.Xml.XmlNode xmlAppSettings = xml.SelectSingleNode("/configuration/appSettings");
   xmlAppSettings.RemoveChild(xml.SelectSingleNode("/configuration/appSettings/add[@key='FunctionName']")); //மேம்பாடு முடிந்து விட்டதால், இந்த பண்பை உள்ளமைக்கோப்பில் இருந்தே எடுத்து விடலாம்.
   xml.Save(Application.ExecutablePath + ".config"); //FunctionName keyஐ நீக்கியாகிவிட்டது. கோப்பை சேமித்து விடலாம்.
 }
}

public class clsUpgrader
{
 public clsUpgrader()
 {
  
 }
 public static void myfunction1()
 {
 //மேம்பாட்டுக்கான நிரல்வரிகள்
 }
}

துணைநிரற்கூறின் பெயரை இயக்க நேரத்தில் அறிந்து அழைப்பது, Factory Patternல் class பெயரை இயக்க நேரத்தில் முடிவுசெய்து ஆப்ஜக்ட் உருவாக்குவது போல் தோன்றிகிறது.

Print | posted on Wednesday, August 02, 2006 2:42 PM | Filed Under [ C# ]

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 8 and type the answer here:

Powered by: