我有一个应用程序,它使用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)使用单独的类如下:
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)
{
...
}
...
}
答案 0 :(得分:0)
我喜欢做选项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 :(得分:0)
选项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;
}
}
}
我们在静态变量中保存了配置文件中的值。当它需要时我们从这个变量中得到它。