Quantcast
Channel: ASP.NET Core
Viewing all articles
Browse latest Browse all 9386

Creating generic Singleton

$
0
0

I would like to read the contents of several tables into a singleton so that I don't have to keep querying my database for (mostly) static data.  When writing the routines to read the database, they all seemed the same so I created a generic method to do so.  Works fine.

However, I am unable to assign the results of the table data generically to static members of the singleton.  An illustration would probably help.  Here's my Singleton class

    public sealed class Tables  // Sealed so nothing can inherit this class
    {
        private static Tables instance;

        private Tables()
        {
        }

        // Tables to read.  Only want to get these once
        public static List<Linksmvccore> _alllinks { get; set; } = null;
        public static List<Peoplemvc> _allpeople { get; set; } = null;
        public static List<Bagsmvc> _allbags { get; set; } = null;
        public static List<Country> _allcountries { get; set; } = null;
        public static List<Country> _allpertinentcountries { get; set; } = null;
        //public static Dictionary<string, List<T> _alltables { get; set; } =
        //{
        //    {"Links", _alllinks }
        //}


        public static async Task<Tables> GetFromTable<T>(DbSet<T> TableToRead) where T : class
        {
            if (instance == null)
            {
                instance = new Tables();
            }

            if (_alllinks == null) // _alllinks is not generic!!!!
            {
                 var x = await TableToRead.ToListAsync();
                _alllinks = x as List<Linksmvccore>; // List<Linksmvccore> is not generic!!!!
            }

            return instance;
        }
}

Here is how I call the generic singleton method for the "Links" table

await Tables.GetFromTable(_context.Links);

I attempted to put everything in a static generic data dictionary with no success.  I could also put a switch statement into GetFromTable() and load each list based upon typeof(T) but if I someday have hundreds of tables, this seems like a bad idea.  Any help appreciated.


Viewing all articles
Browse latest Browse all 9386

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>