2012-01-09 21 views
1

私は、ウィンドウ(WPF)とWeb(ASP.NET)コンテキストで使用されるクラスライブラリを持っています。ライブラリには、Windowsコンテキストで使用されている場合はユーザースコープで、Webコンテキストで使用されている場合はアプリケーションスコープである必要があります。私はそれらをユーザースコープとして宣言し、デフォルト値を "pseudo-application-scoped"として使用したいと思います。私の問題は、Webアプリケーションは設定エラーを投げてユーザスコープの設定を禁止することです。ASP.NETのユーザースコープ設定

これを処理する最良の方法は、フレームワーク構成システム内で行うことが望ましいですか?

+1

あなたはライブラリを変更せずにこれを行うことができますどのように見ないでください。私は、ユーザーの設定がWindowsのユーザーフォルダに保存されていることを前提としています。明白な理由から、ASP.NETにはそのようなことはありません。 – Stilgar

+0

@Stilgar:私はライブラリを変更することができますが、独自の設定クラスを導入することで、 "ホイールを再発明"したくありません。 –

+1

クラスからの設定の実際の永続性を抽象化し、実装固有の永続性を提供することを検討しているかもしれませんが、同じクラスを扱いますが、Windows設定とASP.Netの設定を別々に扱うプロバイダを接続します。 –

答えて

2

避けられないに直面して、[OK]をクリックします。 ASP.NETにはユーザースコープの設定はありません。混合クライアント/サーバ環境で使用されるクラスライブラリはそれらを使用すべきではありません!ここで

は私が終わったソリューションです:サーバー環境(ASP.NET)での使用のために

クラスライブラリのすべての設定がアプリケーションスコープでなければなりません。

クライアント環境(WPF)で使用するための2番目の設定を紹介します。これらの設定には、クラスライブラリのプロパティ名およびタイプと同じプロパティ名とタイプがありますが、スコープが異なり、メインアセンブリに配置されています。

小さなコードでは、ライブラリ設定クラスを拡張して、ユーザースコープ設定を挿入します。私は、ライブラリの設定に第二の設定クラスを注入することができ、この拡張子を持つ

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

the SettingsProvider classを参照すると、ASP.NET環境用の互換性のあるプロバイダをサブクラス化することができます。

現在のコードをそのまま使用することができますが、ASP.NETの場合は別のプロバイダを追加する必要があるため、現在のコードを簡単に変更できる可能性があります。

This gives a nice overview as well

関連する問題