我有一个在Windows(WPF)和Web(ASP.NET)上下文中使用的类库。如果在Windows上下文中使用,则库具有相当用户范围的设置,如果在Web上下文中使用,则必须是应用程序范围的。我想将它们声明为用户范围,并使用默认值“pseudo-application-scoped”。我的问题是,Web应用程序通过抛出配置错误来禁止用户范围的设置。
处理此问题的最佳方法是什么,最好是在框架配置系统中?
答案 0 :(得分:2)
好的,面对不可避免的。 ASP.NET中没有用户范围的设置。混合客户端/服务器环境中使用的类库不应使用它们!
以下是我结束的解决方案:
对于服务器环境(ASP.NET)中的用法,类库的所有设置都必须是应用程序范围的。
我在客户端环境(WPF)中引入了第二组设置。这些设置的属性名称和类型与类库属性名称和类型相同,但它们的范围可能不同,它们位于我的主程序集中。
使用一小段代码我扩展库设置类以注入用户范围的设置。
namespace ClassLibrary.Properties
{
using System.Configuration;
public sealed partial class Settings {
private ApplicationSettingsBase injectedSettings;
public void InjectSettings(ApplicationSettingsBase settings)
{
injectedSettings = settings;
}
public override object this[string propertyName]
{
get
{
if (injectedSettings != null)
return injectedSettings[propertyName];
return base[propertyName];
}
set
{
base[propertyName] = value;
}
}
}
}
使用此扩展程序,我可以将第二个设置类注入库设置:
ClassLibrary.Properties.Default.InjectSettings(Application.Properties.Settings.Default);
答案 1 :(得分:1)
通过子类化查看the SettingsProvider class,您可以为ASP.NET环境创建兼容的提供程序。
它可能会使当前代码变得非常简单,因为您可以保留当前代码,但在ASP.NET中时必须添加不同的提供程序。