private void Provision <Target, TConfigure>( NameConfigure[] nameConfigures, Dictionary <string, Target> container, IConfigurationFactory <TConfigure> configurationFactory, IServiceFactory <Target, TConfigure> serviceFactory) where TConfigure : IConfigure { if (nameConfigures != null) { logger.Info("Provisioning..."); foreach (var item in nameConfigures) { try { Variables.ToList().ForEach(x => item.ConfigureFile = item.ConfigureFile.Replace("{$" + x.Key + "}", x.Value)); logger.Debug($"Provisioning:{item.Name}"); logger.Info("Configure File:" + item.ConfigureFile); var configure = configurationFactory.CreateConfigure(this.Storage, item.ConfigureFile); var instance = serviceFactory.GetService(configure); container[item.Name] = instance; logger.Debug($"Provisioned:{item.Name}"); } catch (Exception ex) { logger.Error($"{item.Name} provision fail, Caused by{ex.Message}"); } } logger.Info("Provisioned"); } else { logger.Warn("Nothing Provision"); } }