public static void Main()
var container = new UnityContainer();
.RegisterSingleton<IDrinkMachine, DrinkMachine>()
.RegisterSingleton<IDrinkFactory, CocoColaFactory>()
.RegisterSingleton<IDrink, CocaCola>()
.RegisterFactory<IDrinkFactory>(c => new CocoColaFactory(
create: () => c.Resolve<IDrink>()
IDrinkMachine drinkMachine = container.Resolve<IDrinkMachine>();
IDrink drink = drinkMachine.DispenseDrink();
Console.WriteLine(drink.Name);
public interface IDrinkMachine
public IDrink DispenseDrink();
public interface IDrinkFactory
public class DrinkMachine : IDrinkMachine
private IDrinkFactory _drinkFactory;
public DrinkMachine(IDrinkFactory drinkFactory)
_drinkFactory = drinkFactory;
public IDrink DispenseDrink()
return _drinkFactory.Create();
public class CocoColaFactory : IDrinkFactory
private Func<IDrink> _create;
public CocoColaFactory(Func<IDrink> create)
public IDrink Create () => _create();
public class CocaCola : IDrink
public class PepsiFactory : IDrinkFactory
private Func<IDrink> _create;
public PepsiFactory(Func<IDrink> create)
public IDrink Create () => _create();
public class Pepsi : IDrink