我最近在.dll中打破了winform应用程序的一部分。那个dll中的一些类
想要获取/存储用户设置。
这些类只使用了VS生成的设置文件,所以它就是这样做的
Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save()
等。
我现在有什么选择将代码移到类库/ .dll?
答案 0 :(得分:3)
托管应用程序应该处理配置文件的接口,而不是DLL。任
将DLL中需要读取/修改的任何设置作为参数传递,或者
传入可由DLL修改的设置的名称 - 值集合,并在控制权返回到调用应用程序时保存DLL对集合所做的任何更改。
原则上类似于从分层应用程序的业务层中删除数据库接口并将其封装到数据层中。
答案 1 :(得分:2)
使用DLL存储用户设置对我来说没有多大意义。 DLL是库,而不是应用程序,并且不直接与用户交互。如果DLL中的类需要访问用户设置,则可以将它们作为参数传递。
答案 2 :(得分:2)
自动生成Properties类。它实际上是配置文件的包装器。如果您不想更改设计,只需进入代码并将其复制到DLL中即可。但请记住,它将不再神奇地保持(重新生成)。或者您可以使用ConfigurationManager直接获取配置文件。
答案 3 :(得分:0)
我不推荐它(最好使用你自己的类进行设置),但你可以试试这个:
string sectionName = "applicationSettings/" +
appName + ".Properties.Settings";
System.Configuration.ClientSettingsSection section =
(System.Configuration.ClientSettingsSection)
System.Configuration.ConfigurationManager.GetSection(sectionName);
foreach (SettingElement setting in section.Settings)
{
string value = setting.Value.ValueXml.InnerText;
string name = setting.Name;
if (name.ToLower().StartsWith(searchName.ToLower()))
{
return value;
}
}
答案 4 :(得分:0)
对于那些需要从userDirectory/user.config
读取设置的人,这是一个解决方案:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
ConfigurationSectionGroup userSettings = config.GetSectionGroup("userSettings");
ClientSettingsSection settings = (ClientSettingsSection)userSettings.Sections.Get("[applicationName].Properties.Settings");
SettingElement elem = settings.Settings.Get([settingName]);
var sett = elem.Value.ValueXml.InnerText;