1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . Configuration ;
4+ using System . Linq ;
5+ using System . Reflection ;
6+ using NConfiguration ;
7+ using NConfiguration . Joining ;
8+ using NConfiguration . Monitoring ;
9+ using NConfiguration . Xml ;
10+ using NLog ;
11+
12+ namespace Demo
13+ {
14+ class Program
15+ {
16+ static void Main ( string [ ] args )
17+ {
18+ var path = ConfigurationManager . OpenExeConfiguration ( Assembly . GetExecutingAssembly ( ) . Location ) . FilePath ;
19+
20+ var loader = new SettingsLoader ( ) ;
21+ loader . XmlFileByExtension ( ) . FindingSettings += onFindingSettings ;
22+ loader . XmlFileBySection ( ) . FindingSettings += onFindingSettings ;
23+ loader . Loaded += ( s , e ) => _log . Info ( "Loaded: {0} ({1})" , e . Settings . GetType ( ) , e . Settings . Identity ) ;
24+
25+ var systemSettings = new XmlFileSettings ( path , "ExtConfigure" ) ;
26+
27+ systemSettings . ToAppSettings ( ) ;
28+
29+ var loaded = loader . LoadSettings ( systemSettings ) ;
30+ monitoringFirstFileChange ( loaded . Sources ) ;
31+
32+ var appSettings = loaded . Joined . ToAppSettings ( ) ;
33+
34+ var cfg = appSettings . First < MyXmlConfig > ( ) ;
35+
36+ Console . WriteLine ( "AttrField: {0}" , cfg . AttrField ) ;
37+ Console . WriteLine ( "ElemField: {0}" , cfg . ElemField ) ;
38+ Console . WriteLine ( "Press any key..." ) ;
39+ Console . ReadKey ( ) ;
40+ }
41+
42+ private static void onFindingSettings ( object sender , FindingSettingsArgs args )
43+ {
44+ var sourceIdentity = args . Source as IIdentifiedSource ;
45+ _log . Debug ( "Find settings '{0}' in directory: '{1}' (customer: {2})" ,
46+ args . IncludeFile . Path ,
47+ args . SearchPath ,
48+ sourceIdentity == null ? "unknown" : sourceIdentity . Identity ) ;
49+ }
50+
51+ private static void monitoringFirstFileChange ( IEnumerable < IIdentifiedSource > sources )
52+ {
53+ var fileCheckers = FileChecker . TryCreate ( sources ) . ToArray ( ) ;
54+ _log . Info ( "Setup monitoring for {0} files..." , fileCheckers . Length ) ;
55+ var fCh = new FirstChange ( fileCheckers ) ;
56+ fCh . Changed += ( s , e ) =>
57+ {
58+ foreach ( var fileChecker in fileCheckers )
59+ fileChecker . Dispose ( ) ;
60+
61+ _log . Info ( "Config files is changed." ) ;
62+ } ;
63+ }
64+
65+ private static readonly Logger _log = LogManager . GetCurrentClassLogger ( ) ;
66+ }
67+ }
0 commit comments