Получить разные значения, используя динамическое ключевое слово

В моем веб-приложении я пытаюсь получить appsettings и раздел строк соединения, оцененный из web.config. Я использую динамическую клавиатуру, чтобы получить значения раздела. пожалуйста, смотрите мой код ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Dynamic;
using System.Collections.Specialized;
using System.Configuration;

namespace SessiontimeoutCshp
{
    public class AppSettingsWrapper:DynamicObject
    {
        private NameValueCollection _items;
        private ConnectionStringSettingsCollection _connections;
        public enum Configsections
        {
            Appsettings,
            Connectionstrings
        }

        private string configsections;

        public string ConfigSections
        {
            get { return configsections; }
            set { configsections = value; }
        }


        public AppSettingsWrapper(Configsections conEnum)
        {
            switch (conEnum)
            {
                case Configsections.Appsettings:
                    _items = ConfigurationManager.AppSettings;
                    break;
                case Configsections.Connectionstrings:                    
                    _connections = ConfigurationManager.ConnectionStrings;
                    break;
                default:
                    break;
            }

            //if (conEnum.Equals(Configsections.Appsettings))
            //{
            //    _items = (T)(object)ConfigurationManager.AppSettings;
            //}
            //if (conEnum.Equals(Configsections.Connectionstrings))
            //{
            //    _connections = (T)(object)ConfigurationManager.ConnectionStrings;
            //}
        }

        //private object GetSectionvalue<T>(T sectionReturn)        
        //{ 

        //}



        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (_items != null)
            {
                result = _items[binder.Name];
            }
            if (_connections != null)
            {
                result = _connections[binder.Name];
            }
            return result != null;
            //return base.TryGetMember(binder, out result);
        }

        public override bool TryConvert(ConvertBinder binder, out object result)
        {
            return base.TryConvert(binder, out result);
        }
    }
}

я обращаюсь к классу appsettingwrapper в default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Collections.Specialized;


namespace SessiontimeoutCshp
{
    public partial class _Default : System.Web.UI.Page
    {
        public string str;
        protected void Page_Load(object sender, EventArgs e)
        {
           // int i = Convert.ToInt32(ConfigurationManager.AppSettings["Sessiontimeout"]);
          // object obj= ConfigurationManager.GetSection("membership");
            dynamic appSettings = new AppSettingsWrapper(AppSettingsWrapper.Configsections.Appsettings);


            //str = appSettings.SessionWarning;
           // int testImplicit = appSettings.SessionWarning;

            string str1 = LinkButton1.ClientID;
        }
    }
}

Здесь, когда я хочу получить значения для раздела appsettings, мне нужно создать экземпляр класса-оболочки с перечислением appsettings, а в следующей строке, если я хочу получить значение раздела строки соединения, мне нужно снова создать экземпляр класса-оболочки appsettings. Но я хочу получить оба значения, используя только один экземпляр класса-оболочки appsettings. Я пытался использовать свойства, но поскольку класс appsettingwrapper наследуется от динамического объекта, объявленные свойства недоступны в intellisense. Пожалуйста, дайте мне знать, как получить значения обоих разделов, используя один экземпляр класса appsettingswrapper. Пожалуйста, дайте мне знать, если требуется дополнительная информация.

0 ответов

Другие вопросы по тегам