DI .net core conditionally [AddKeyed]

				
					using AddKeyMethods;
using ConsoleApp1;
using Microsoft.Extensions.DependencyInjection;

var collection = new ServiceCollection();

collection.AddKeyedSingleton<ITaxCalculator, IndiaTaxCalculator>(Locations.India);
collection.AddKeyedSingleton<ITaxCalculator, UAETaxCalculator>(Locations.UAE);
collection.AddScoped<Purchase>();
var provider = collection.BuildServiceProvider();

//ITaxCalculator calculator = provider.GetKeyedService<ITaxCalculator>(Locations.India);
Console.Clear();
//Console.WriteLine($"Your tax rate is {calculator.CalculateTax()}");


var purchase = provider.GetService<Purchase>();
var total = purchase?.CheckOut();


Console.ReadKey();
				
			
				
					using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AddKeyMethods
{
    public interface ITaxCalculator
    {
        int CalculateTax();
    }

    public class IndiaTaxCalculator : ITaxCalculator
    {
        public int CalculateTax() { return 30; }
        
    }

    public class UAETaxCalculator : ITaxCalculator
    {
        public int CalculateTax() { return 0; }

    }

    public enum Locations
    {
        India,
        UAE,
        USA
    }
}

				
			
				
					using AddKeyMethods;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;

namespace ConsoleApp1
{
    public class Purchase
    {
        private readonly ITaxCalculator _taxCalculator;

        public Purchase([FromKeyedServices(Locations.India)]ITaxCalculator taxCalculator)
        {
            _taxCalculator = taxCalculator;
        }

        [HttpGet]
        public int CheckOut()
        {
            var total = _taxCalculator.CalculateTax() + 200;
            return total;
        }
    }
}

				
			

Leave a Comment