Saturday, January 7, 2017

DI


Unity


// ui
   public class DIController : ApiController
   {
 
       /*
        -> techniq that helps to inject dependant objects to the class.
        -> why di
           -> reduce tide cupling. and be a losely cuple archi.
           -> core of decuppling in two layers are interface.
        */
 
       private ICustomer cus;
       public DIController(ICustomer _cus) {
           cus = _cus;
       }
       [HttpGet]
       public string Add()
       {
           cus.Add();
           return "added";
       }
   }
 
   // bl
 
   public interface ICustomer {
 
       void Add();
   }
 
   public class Customer:ICustomer
   {
       public string CustomerName { getset; }
 
       private IDal obj;
       public Customer(IDal iobj)
       {
           obj = iobj;
       }
       public void Add()
       {
           obj.Add();
 
       }
   }
 
   // dal
 
   public interface IDal
   {
       void Add();
   }
 
   public class SqlDal : IDal
   {
 
       public void Add()
       {
 
           Console.WriteLine("recode inserted to sql server");
       }
   }
 
   public class OracleDal : IDal
   {
 
       public void Add()
       {
 
           Console.WriteLine("recode inserted to oracle server");
       }
 
   }

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
 
            // Web API routes
            config.MapHttpAttributeRoutes();
 
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
 
            var container = new UnityContainer();
            container.RegisterType<IDalSqlDal>(new HierarchicalLifetimeManager());
            container.RegisterType<IDalOracleDal>(new HierarchicalLifetimeManager());
            container.RegisterType<ICustomerCustomer>(new HierarchicalLifetimeManager());
            config.DependencyResolver = new UnityResolver(container);
        }
    }

///////////////////////////////////////////////////

namespace DependancyInjections.App_Start
{
    public class UnityResolver : IDependencyResolver
    {
        protected IUnityContainer container;
 
        public UnityResolver(IUnityContainer container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            this.container = container;
        }
 
        public object GetService(Type serviceType)
        {
            try
            {
                return container.Resolve(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return null;
            }
        }
 
        public IEnumerable<object> GetServices(Type serviceType)
        {
            try
            {
                return container.ResolveAll(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return new List<object>();
            }
        }
 
        public IDependencyScope BeginScope()
        {
            var child = container.CreateChildContainer();
            return new UnityResolver(child);
        }
 
        public void Dispose()
        {
            container.Dispose();
        }
    }
 
}


No comments:

Post a Comment

CS Events