2011-06-01 13 views
7

.NET4 sürümünde, hiç kimse, yapılandırmaya istediğiniz herhangi bir şeyi yazmanıza izin verecek ve daha sonra bir dynamic nesnesine erişebileceğiniz dinamik bir web.config öğesi oluşturdu mu?Serbest biçim Dinamik web.config bölge

Özel yapılandırma bölümleri oluşturmaya giden iş miktarı, hiçbir sebepten ötürü en üstte. Bu, birinin her seferinde yeni bir yapılandırma bölümü oluşturmak için 5'den fazla sınıf oluşturmak için kolayca ihtiyaç duyduğu şarkıyı ve dansı değiştirip değiştirmediğini merak etti.

Eğer DynamicObject sınıftan devralabilir, sadece yapılandırma dosyasının appSettings bölümüne erişmek istiyorsanız

cevap

3

(Not, ben özgür bir form derken açıkçası geçerli bir xml elemanı uyum beklenir)

<configuration> 
    <appSettings> 
    <add key="FavoriteNumber" value="3" /> 
    </appSettings> 
</configuration> 
: Bu app.config dosya olduğunu varsayarak, Sonra

public class DynamicSettings : DynamicObject { 
    public DynamicSettings(NameValueCollection settings) { 
     items = settings; 
    } 

    private readonly NameValueCollection items; 

    public override bool TryGetMember(GetMemberBinder binder, out object result) { 
     result = items.Get(binder.Name); 
     return result != null; 
    } 
} 

: ve TryGetMember yöntemini geçersiz

... 'FavoriteNumber' ayarı şöyle girilebildiği: Bir RuntimeBinderException tanımsız sonuçlar atılan bir tuşa erişmeye çalışan bu

class Program { 
    static void Main(string[] args) { 
     dynamic settings = new DynamicSettings(ConfigurationManager.AppSettings); 
     Console.WriteLine("The value of 'FavoriteNumber' is: " + settings.FavoriteNumber); 
    } 
} 

Not. Her zaman true'u döndürmek için geçersiz kılınan TryGetMember'u değiştirerek bunu önleyebilirsiniz, bu durumda tanımsız özellikler yalnızca null döndürecektir.

+0

+1 ve kabul ediyorum, bunun etrafında bir FOSS projesi oluşturmayı düşünmüştüm ve bana çok daha az geçici bir başlangıç ​​noktası verdiniz. –