处理从配置文件读取的参数的正确方法是什么?
What is correct approach to handle parameters read from config file?
我有一个应用程序使用 App.config 文件来存储整个应用程序中使用的参数。参数代表文件名、路径等。
主要调用如下所示:
CsvExtractor.ExtractDataAndCopyFiles();
...
public class CsvExtractor
{
public static void ExtractDataAndCopyFiles()
{
var eventList = DataReader.ReadInputCsvFile(ExtractorParams.InputCsvFile, ExtractorParams.SheetName);
DataWriter.WriteOutputCsvFile(
ExtractorParams.OutputCsvFile,
CreateExtractData(eventList),
ExtractorParams.EventFolder,
ExtractorParams.BlobFolder,
ExtractorParams.MissingFiles);
}
...
}
什么是正确的做法:
1) 使用单独的 class 如下:
public class ExtractorParams
{
public static string InputCsvFile
{
get { return ConfigurationManager.AppSettings["InputCsvFile"]; }
}
public static string SheetName
{
get { return ConfigurationManager.AppSettings["SheetName"]; }
}
public static string EventFolder
{
get { return ConfigurationManager.AppSettings["EventFolder"]; }
}
public static string BlobFolder
{
get { return ConfigurationManager.AppSettings["BlobFolder"]; }
}
public static string OutputCsvFile
{
get { return ConfigurationManager.AppSettings["OutputCsvFile"]; }
}
public static string MissingFiles
{
get { return ConfigurationManager.AppSettings["MissingFiles"]; }
}
}
并在需要时使用它。
或者:
2) 使用参数数组如下:
CsvExtractor.ExtractDataAndCopyFiles(list_of_params);
...
public class CsvExtractor
{
public static void ExtractDataAndCopyFiles(params string[] list)
{
...
}
...
}
我喜欢做选项 1),但有点抽搐。
创建应包含设置的模型:
public class CsvConfig
{
public string Opt1 { get; set; }
public string Opt2 { get; set; }
//....
}
装载机
public class Config
{
public CvsConfig Csv { get; private set; }
public Config()
{
Csv = new CsvConfig
{
// load stuff from where ever
}
}
}
通过分离配置模型和它的填充将分离您使用 app.config 进行设置的事实。这在考虑测试等时很有用。
这当然只有在你不使用静态的东西,但更多的依赖注入方法时才有效。
选项 1) +1
但是在我的项目中我们做了这样的事情
public class AppSettingsManager : IAppSettingsManager
{
private static string filesFolder;
public static string FilesFolder
{
get
{
if (filesFolder == null)
{
filesFolder = filesFolder = ConfigurationManager.AppSettings["FilesFolder"];
}
return filesFolder;
}
}
}
我们将配置文件中的值保存在静态变量中。当需要时,我们从这个变量中获取它。
我有一个应用程序使用 App.config 文件来存储整个应用程序中使用的参数。参数代表文件名、路径等。
主要调用如下所示:
CsvExtractor.ExtractDataAndCopyFiles();
...
public class CsvExtractor
{
public static void ExtractDataAndCopyFiles()
{
var eventList = DataReader.ReadInputCsvFile(ExtractorParams.InputCsvFile, ExtractorParams.SheetName);
DataWriter.WriteOutputCsvFile(
ExtractorParams.OutputCsvFile,
CreateExtractData(eventList),
ExtractorParams.EventFolder,
ExtractorParams.BlobFolder,
ExtractorParams.MissingFiles);
}
...
}
什么是正确的做法:
1) 使用单独的 class 如下:
public class ExtractorParams
{
public static string InputCsvFile
{
get { return ConfigurationManager.AppSettings["InputCsvFile"]; }
}
public static string SheetName
{
get { return ConfigurationManager.AppSettings["SheetName"]; }
}
public static string EventFolder
{
get { return ConfigurationManager.AppSettings["EventFolder"]; }
}
public static string BlobFolder
{
get { return ConfigurationManager.AppSettings["BlobFolder"]; }
}
public static string OutputCsvFile
{
get { return ConfigurationManager.AppSettings["OutputCsvFile"]; }
}
public static string MissingFiles
{
get { return ConfigurationManager.AppSettings["MissingFiles"]; }
}
}
并在需要时使用它。
或者:
2) 使用参数数组如下:
CsvExtractor.ExtractDataAndCopyFiles(list_of_params);
...
public class CsvExtractor
{
public static void ExtractDataAndCopyFiles(params string[] list)
{
...
}
...
}
我喜欢做选项 1),但有点抽搐。
创建应包含设置的模型:
public class CsvConfig
{
public string Opt1 { get; set; }
public string Opt2 { get; set; }
//....
}
装载机
public class Config
{
public CvsConfig Csv { get; private set; }
public Config()
{
Csv = new CsvConfig
{
// load stuff from where ever
}
}
}
通过分离配置模型和它的填充将分离您使用 app.config 进行设置的事实。这在考虑测试等时很有用。 这当然只有在你不使用静态的东西,但更多的依赖注入方法时才有效。
选项 1) +1 但是在我的项目中我们做了这样的事情
public class AppSettingsManager : IAppSettingsManager
{
private static string filesFolder;
public static string FilesFolder
{
get
{
if (filesFolder == null)
{
filesFolder = filesFolder = ConfigurationManager.AppSettings["FilesFolder"];
}
return filesFolder;
}
}
}
我们将配置文件中的值保存在静态变量中。当需要时,我们从这个变量中获取它。