Visual Studioによって生成されるRefernce.cs
ファイルは、WebサービスのURLが設定から取得されることを示しています。
this.Url = global::ConsoleApplication1.Properties.
Settings.Default.ConsoleApplication1_net_webservicex_www_BarCode;
ジョン・サンダースは彼のコメントであなたに素晴らしい提案をしたと思います。SettingsProvider
次のようなクラスが必要です。
...アプリケーション設定アーキテクチャで使用される構成データを格納するためのメカニズムを定義します。.NET Frameworkには、構成データをローカルファイルシステムに格納する単一の既定の設定プロバイダーであるLocalFileSettingsProviderが含まれています。ただし、抽象SettingsProviderクラスから派生することにより、代替のストレージメカニズムを作成できます。ラッパークラスが使用するプロバイダーは、ラッパークラスをSettingsProviderAttributeで装飾することによって決定されます。この属性が指定されていない場合、デフォルトのLocalFileSettingsProviderが使用されます。
このアプローチに従ってどれだけ進歩したかはわかりませんが、かなり簡単に進むはずです。
SettingsProvider
クラスを作成します。
namespace MySettings.Providers
{
Dictionary<string, object> _mySettings;
class MySettingsProvider : SettingsProvider
{
// Implement the constructor, override Name, Initialize,
// ApplicationName, SetPropertyValues and GetPropertyValues (see step 3 below)
//
// In the constructor, you probably might want to initialize the _mySettings
// dictionary and load the custom configuration into it.
// Probably you don't want make calls to the database each time
// you want to read a setting's value
}
}
プロジェクトの部分クラスのクラス定義を拡張し、 :YourProjectName.Properties.Settings
で装飾します。SettingsProviderAttribute
[System.Configuration.SettingsProvider(typeof(MySettings.Providers.MySettingsProvider))]
internal sealed partial class Settings
{
//
}
オーバーライドされたメソッドでは、ディクショナリGetPropertyValues
からマップされた値を取得する必要があります。_mySettings
public override SettingsPropertyValueCollection GetPropertyValues(
SettingsContext context,
SettingsPropertyCollection collection)
{
var spvc = new SettingsPropertyValueCollection();
foreach (SettingsProperty item in collection)
{
var sp = new SettingsProperty(item);
var spv = new SettingsPropertyValue(item);
spv.SerializedValue = _mySettings[item.Name];
spv.PropertyValue = _mySettings[item.Name];
spvc.Add(spv);
}
return spvc;
}
コードでわかるように、これを行うには、に追加された設定名と、Webサービスへの参照を追加した日時()を知っている必要がapp.config
ありSettings.settings
ますConsoleApplication1_net_webservicex_www_BarCode
。
<applicationSettings>
<ConsoleApplication30.Properties.Settings>
<setting name="ConsoleApplication1_net_webservicex_www_BarCode"
serializeAs="String">
<value>http://www.webservicex.net/genericbarcode.asmx</value>
</setting>
</ConsoleApplication30.Properties.Settings>
</applicationSettings>
これは非常に単純な例ですが、より複雑なオブジェクトを使用して、適切な構成値を取得するために、item.Attributes
またはなどのコンテキストで使用可能な他のプロパティと組み合わせて構成情報を格納する場合があります。context