2011-06-01 59 views
7

随着.NET4的发布,任何人都创建了一个动态web.config元素,它只是让你输入任何你想要的配置,然后你可以访问它关闭dynamic对象?自由格式动态web.config区域

进入创建自定义配置节的工作量似乎没有理由超过顶部。这导致我想知道是否有人已经替换了容易需要创建5个以上的类的歌曲和舞蹈来每次都滚动新的配置部分。

(注意,当我说免费的形式我当然希望它符合一个有效的XML元素)

回答

3

如果你只是想访问配置文件的appSettings部分,可以从DynamicObject类继承并覆盖TryGetMember方法:

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; 
    } 
} 

然后,假设这是你的app.config文件:

<configuration> 
    <appSettings> 
    <add key="FavoriteNumber" value="3" /> 
    </appSettings> 
</configuration> 

...的“FavoriteNumber”设置可能会像这样来访问:

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

注意,试图访问一个关键是在RuntimeBinderException不确定的结果被抛出。您可以通过将覆盖的TryGetMember更改为始终返回true来防止此问题,在这种情况下,未定义的属性将仅返回null

+0

+1和接受,我正在考虑创建一个FOSS项目,并且你给了我一个短暂的起点。 – 2011-06-06 21:29:42