I have to write a Complex calculator logic which has 4 different components to be calculated brokerage, stockprice, admin charges & other charges. Each having a different logic and formulas.
So I decided to use Unity DI. I have a ContainerFactoryClass which resolves all classes which implements IChargeCalculator interface as shown below in the TotalAnnualCostCalculator constructor.
public class TotalAnnualCostCalculator
{
    private readonly IUnityContainer container;
   //Constructor
    public TotalAnnualCostCalculator()
    {
        container = ContainerFactory.InitializeContainer();
        ContainerFactory.SetupContainer(container);
    }
    public AnnualCostCharges CalculateTotalAnnualCost(Parameters product)
    {
          var calculators = container.ResolveAll<ICalculator>().ToList();
          // Invoke calcualtion method
           Parallel.ForEach(calculators, c =>
        {
            return c.CalculateAnnualCost(product);
        });
    }
}
Container Factory class:-
public static class ContainerFactory
{
    public static IUnityContainer Container { get; private set; }
    public static IUnityContainer InitializeContainer()
    {
        var container = new UnityContainer();
        RegisterDependencies(container);
        return container;
    }
    private static void RegisterDependencies(UnityContainer container)
    {
        container.RegisterType<ICalculatorStrategyFactory, CalculatorStrategyFactory>("Factory");
        container.RegisterType<IEffectiveAnnualCostCalculator, InvestmentManagementChargeCalculator>("IMCChargeCalculator",
            new InjectionConstructor(new ResolvedParameter<ICalculatorStrategyFactory>("Factory")));
        //container.RegisterType<IEffectiveAnnualCostCalculator, AdministrationChargeCalculator>("AdministrationChargeCalculator");
        container.RegisterType<IEffectiveAnnualCostCalculator, AdviceChargeCalculator>("AdviceChargeCalculator");
        container.RegisterType<IEffectiveAnnualCostCalculator, OtherChargeCalculator>("OtherChargeCalculator");
        container.RegisterType<IInvestmentManagementChargeCalculator, LumpSumIMCCalculator>("LumpSumIMCCalculator");
        container.RegisterType<IInvestmentManagementChargeCalculator, DebitOrderIMCCalculator>("DebitOrderIMCCalculator");
    }
    public static void SetupContainer(IUnityContainer container)
    {
        Container = container;
    }
}
Then any API consumes my Calculator.dll by just creating an instance of TotalAnnualCostCalculator and call a method like this.
var totalCharges = calc.CalculateTotalAnnualCost(prod);
My code reviewer says its better to use Factory Pattern ,as this tightly coupled to Unity Framework.
Please advise
 
     
    