Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Leggere senza l'aiuto dell'XML il file di configurazione di un'altra applicazione

Non è detto che per leggere un file di configurazione (per esempio un web.config) di un'altra applicazione, bisogna per forza utilizzare le classi XML. Basta essere folli e scrivere una cosa come questa qui sotto, sparata oggi - e di cui ne sono contento :-)

In una web application Test, che ha questo web.config:

<?xml version="1.0" encoding="utf-8" ?>
<
configuration>
  <
appSettings>
    <
add key="fooMessage" value="Hello World!" />
  </
appSettings>
</
configuration>

aggiungiamo questa classe:

using System;
using System.Configuration;
using System.Collections.Specialized;

namespace Ugidotnet.Configuration
{
  public sealed class CrossConfigSetter
  {
    private CrossConfigSetter(){}

    public const string DataName = "AppSettings";
    public static void SetAppSettingsData()
    {
      NameValueCollection serializableAppSettings = new NameValueCollection(ConfigurationSettings.AppSettings);
      AppDomain.CurrentDomain.SetData(DataName, serializableAppSettings);
    }
  }
}

mentre nella console application da cui vogliamo leggere il web.config della web application Test, scriviamo:

using System;
using System.Configuration;
using System.Collections.Specialized;

namespace Ugidotnet.Configuration
{
  public sealed class CrossConfigGetter
  {
    private CrossConfigGetter(){}

    public static NameValueCollection GetAppSettingsData(string configFileName, CrossAppDomainDelegate setter, string dataName)
    {
      NameValueCollection ret;

      AppDomainSetup ads = new AppDomainSetup();
      ads.ConfigurationFile = configFileName;

      AppDomain ad = AppDomain.CreateDomain(Guid.NewGuid().ToString(), null, ads);
      ad.DoCallBack(setter);
      ret = ad.GetData(dataName) as NameValueCollection;
      AppDomain.Unload(ad);

      return ret;
    }
  }
}

per poi utilizzarla così:

using System;
using System.Collections.Specialized;
using Ugidotnet.Configuration;

class TestCrossConfig
{
  static void Main()
  {
    string webConfigFileName = "C:\\Inetpub\\wwwroot\\Test\\Web.config";
    NameValueCollection appSettings = CrossConfigGetter.GetAppSettingsData(
        webConfigFileName,
        new CrossAppDomainDelegate(CrossConfigSetter.SetAppSettingsData),
        CrossConfigSetter.DataName);
    Console.WriteLine(appSettings["fooMessage"]);
  }
}

Commenti graditi.

Print | posted on giovedì 13 gennaio 2005 01:17 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET