ASP.NET中的用户范围设置

时间:2012-01-09 07:40:54

标签: asp.net .net wpf configuration

我有一个在Windows(WPF)和Web(ASP.NET)上下文中使用的类库。如果在Windows上下文中使用,则库具有相当用户范围的设置,如果在Web上下文中使用,则必须是应用程序范围的。我想将它们声明为用户范围,并使用默认值“pseudo-application-scoped”。我的问题是,Web应用程序通过抛出配置错误来禁止用户范围的设置。

处理此问题的最佳方法是什么,最好是在框架配置系统中?

2 个答案:

答案 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中时必须添加不同的提供程序。

This gives a nice overview as well