public class MyConfigObject
{
public class MyConfigObject(MyConfigObject parent)
{
// Copy constructor - don't alter the parent.
}
}
public class MyConfigHandler : IConfigurationSectionHandler
{
public object Create(object parent, object context, XmlNode section)
{
var config = new MyConfigObject((MyConfigObject)parent);
// Process section and mutate config as required
return config;
}
}
现在,当你需要申请配置的很多层面,简单地收集所有文件以层叠从目录中的文件是在工作的过程,然后通过出栈处理这些LIFO顺序。
var currentWorkingDirectory = Path.GetDirectoryName("c:\\User\\jblogs\\Documents\\Projects\\MyApp\\AppFile12.txt");
var currentDirectory = new DirectoryInfo(currentWorkingDirectory)
var userDataRootDirectory = new DirectoryInfo("c:\\User\\jblogs\\");
var configFilesToProcess = new Stack<string>();
do
{
// Search for myapp.config in currentDirectory
// If found push path onto configFilesToProcess
currentDirectory = currentDirectory.GetParent();
}
while(!currentDirectory.Equals(userDataRootDirectory)
var applicationConfigPath = "c:\\Program Files\\MyApp\\config\\myapp.config";
configFilesToProcess.Push(applicationConfigPath);
var configHandler = new MyConfigHandler();
object configuration = null;
object configContext = null; // no idea what this is but i think it is the entire config file
while(configFilesToProcess.Any())
{
var configPath = configFilesToProcess.Pop();
// Load config file
var configNode = null; // Extract your config node using xpath
configuration = configHandler.Create(configuration, configContext, configNode);
}
请注意,上面显示的代码是不是最漂亮的,但它表明了意图 - 我建议拆分出来为若干独立以及命名方法,每做一两件事,把它做好=)