簡體   English   中英

如何在web.config中存儲自定義數據?

[英]How to store custom data in web.config?

我的apiController中具有以下方法:

public IEnumerable<something> GetData(DataProvider dataProvider)
{
    return dataProvider.GetData();
}

我需要從javascript調用此方法,並將其傳遞給DataProvider派生類型的參數。 我可以通過傳遞字符串(例如“ FirstProvider”)來處理此問題,然后在GetData()方法中寫入N個if來創建適當類型的實例。

但是有什么方法可以在web.config文件中編寫類似以下內容的內容:

<DataProviders>
  <type = FirstDataProvider, alias = "FirstProvider">
  <type = SecondDataProvider, alias = "SecondProvider">
</DataProviders>

將getData方法更改為:

public IEnumerable<something> GetData(string dataProviderAlias)
{
                // get provider type by it's alias from web congfig,
                // then instantiated and call: 
    return dataProvider.GetData();
}

然后通過別名查找並實例化類型?

注意 :我接受了以下答案,因為它為我指明了正確的方向,但是msdn說不建議使用IConfigurationSectionHandler
因此,我改用ConfigurationSectionConfigurationElementCollectionConfigurationElement類來構建自定義配置部分。

首先,您只能在web.config中存儲有效的xml。 <type = FirstDataProvider, alias = "FirstProvider">無效的xml。

其次,有很多動人的東西。 請仔細執行以下步驟-

web.config

確保為數據提供者輸入正確的名稱空間。 type =“ YOUR_APPLICATION.DataProviders”

<configuration>
  <configSections>
    <section name="DataProviders" type="WebApplication2010.DataProviders" 
        requirePermission="false"/>
  </configSections>
  <DataProviders>
    <Provider type="FirstDataProvider" alias="FirstProvider"/>
    <Provider type="SecondDataProvider" alias="SecondProvider"/>
  </DataProviders>
  ....
</configuration>

public class DataProviders : IConfigurationSectionHandler
{
    private static bool _initialized;
    public static List<Provider> _providers;

    public object Create(object parent, object configContext, XmlNode section)
    {
        XmlNodeList providers = section.SelectNodes("Provider");

        _providers = new List<Provider>();

        foreach (XmlNode provider in providers)
        {
            _providers.Add(new Provider
            {
                Type = provider.Attributes["type"].Value,
                Alias = provider.Attributes["alias"].Value,
            });
        }

        return null;
    }

    public static void Init()
    {
        if (!_initialized)
        {
            ConfigurationManager.GetSection("DataProviders");
            _initialized = true;
        }
    }

    public static IEnumerable<Provider> GetData(string dataProviderAlias)
    {
        return _providers.Where(p => p.Alias == dataProviderAlias);
    }
}

public class Provider
{
    public string Type { get; set; }
    public string Alias { get; set; }
}

Global.asax

為了獲得良好的設計實踐,您只希望從web.config中讀取一次數據,並將其存儲在靜態變量中。 因此,您想在Global.asax的Application_BeginRequest內部進行初始化。

public class Global : System.Web.HttpApplication
{
    void Application_BeginRequest(object sender, EventArgs e)
    {
        DataProviders.Init();
    }
}

用法

var providers = DataProviders.GetData("FirstProvider").ToList();

您可以appSettings元素的web.config存儲任意數據

<configuration>
   <appSettings>
      <add key="FirstAlias" value="FirstProvider" />
      <add key="SecondAlias" value="SecondProvider" />
   </appSettings>
</configuration>

然后,您可以使用以下命令讀取值:

String firstAlias = System.Configuration.ConfigurationManager.AppSettings["FirstAlias"];
String secondAlias = System.Configuration.ConfigurationManager.AppSettings["SecondAlias"];

它是內置的。 支持。 在這里應該存儲自定義數據。

好吧,我不確定我是否了解您要實現的目標,但是要實現您的想法,您需要一個自定義節處理程序。

http://msdn.microsoft.com/zh-CN/library/2tw134k3(v=vs.100).aspx

如果要為特定的數據提供程序創建數據庫連接,請參見以下類似問題:

ASP.NET:如何從web.config ConnectionString創建連接?

就我而言,我需要在Web.Config文件中存儲兩個byte []變量。 由於它必須是有效的XML數據,因此我像這樣簡單地存儲了數組的內容:

<appSettings>
    <add key="Array1" value="0,1,2,3,4,5,6,7,8,9" />
    <add key="Array2" value="0,1,2,3,4,5,6,7,8,9" />
</appSettings>

然后,我調用一個函數,將其讀取為C#字符串,將其拆分為string [],然后將每個字符串元素作為字節解析為結果byte []並返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM