public object GetConfigurationInstance(string configClassName, Assembly assembly, Type context,
                                               string connectionString, string provider, out IMessage message)
        {
            try
            {
                if (string.IsNullOrEmpty(configClassName))
                {
                    message = _messageFactory.Get(MessageType.MissingConfigurationClass);
                    return(null);
                }

                var configuration = assembly
                                    .GetTypes()
                                    .FirstOrDefault(x => x.FullName == configClassName);

                if (configuration == null)
                {
                    message = _messageFactory.Get(MessageType.ConfigurationTypeNotFound);
                    return(null);
                }

                var configConstructor = configuration.GetConstructor(Type.EmptyTypes);
                if (configConstructor == null)
                {
                    message = _messageFactory.Get(MessageType.ConfigurationTypeNotFound);
                    return(null);
                }

                var instance = configConstructor.Invoke(new object[0]);
                if (instance == null)
                {
                    message = _messageFactory.Get(MessageType.ConfigurationTypeNotInstantiated);
                    return(null);
                }

                var dbConnectionInfoInstance = _entityFrameworkHelper.GetDbConnectionInfoInstance(connectionString,
                                                                                                  provider, out message);

                if (dbConnectionInfoInstance == null)
                {
                    message = _messageFactory.Get(MessageType.UnableToCreateInstanceOfDbConnectionInfo);
                    return(null);
                }

                configuration.GetProperty("ContextType").SetValue(instance, context);
                configuration.GetProperty("MigrationsAssembly").SetValue(instance, assembly);
                configuration.GetProperty("TargetDatabase").SetValue(instance, dbConnectionInfoInstance);
                configuration.GetProperty("AutomaticMigrationDataLossAllowed").SetValue(instance, false);
                configuration.GetProperty("AutomaticMigrationsEnabled").SetValue(instance, true);

                return(instance);
            }
            catch (Exception exp)
            {
                message           = _messageFactory.Get(MessageType.Exception);
                message.Exception = exp;
                return(null);
            }
        }