Wednesday, June 1, 2016

Design Patterns.



Provider Patterns.

1. Provider pattern.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProviderPattern
{
    interface IExternalAuth_Provider
    {
        Groups AddGroup();
        Users AddUser();

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProviderPattern.ExternalAuthDev
{
    public class ExternalAuthDev_Provider : IExternalAuth_Provider
    {
        public Groups AddGroup()
        {
            Groups obj = new Groups { Id =1,Name = "gr1 coming from database ...." };

            Console.WriteLine("Id " + obj.Id + " Name" + obj.Name);
            return obj;
        }

        public Users AddUser()
        {
            return new Users { Id = 1, Name = "user1 coming from database ...." };
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProviderPattern.ExternalAuthDev
{
    public class ExternalAuth_Production: IExternalAuth_Provider
    {
        public Groups AddGroup()
        {
            return new Groups { Id = 1, Name = "gr1 coming from Ad Groups...." };
        }

        public Users AddUser()
        {
            return new Users { Id = 1, Name = "user1 coming from Ad Groups...." };
        }
    }
}



using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProviderPattern
{
    public class AzureAdFactory
    {
        private static IExternalAuth_Provider DataProvider = null;


        protected AzureAdFactory()
        {

        }

       

        public static T InitProvider<T>()
        {
            string ProviderName;

            if (DataProvider == null)
            {
                // Get provider type to create
                ProviderName = "ProviderPattern.ExternalAuthDev." + ConfigurationManager.AppSettings["ProviderName"];
              //  ProviderName =   ConfigClass.ProviderName
                // Create new DataProvider
                DataProvider = (IExternalAuth_Provider)Activator.CreateInstance(Type.GetType(ProviderName));

                
            }
            return (T)DataProvider;
        }
    }
}

<appSettings>
    <!--<add key="ProviderFactory" value="AzureAdFactory"/>-->
    <add key="ProviderName" value="ExternalAuthDev_Provider"/>
  </appSettings>

  <connectionStrings>
        <add name="ExternalAuthDev_Provider"  connectionString="ProviderPattern.ExternalAuthDev.ExternalAuthDev_Provider"/>
    
  </connectionStrings>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProviderPattern
{
    class Program
    {
        static void Main(string[] args)
        {
           
            var obj  = AzureAdFactory.InitProvider<IExternalAuth_Provider>();
            Console.WriteLine(obj.AddGroup()); 
        }
    }
}