private object GetSecureSeededInitializer(ParsedAssemblyQualifiedName assemblyQualifiedName)
        {
            // pre-load generic types from correct locations
            var seedDataAssemblyPath = Path.Combine(
                Path.GetDirectoryName(m_Config.TargetAssemblyPath),
                $"{assemblyQualifiedName.GenericParameters[1].ShortAssemblyName}.dll");

            var seedDataAssembly = Assembly.LoadFrom(seedDataAssemblyPath);
            var seedDataType = seedDataAssembly.GetType(assemblyQualifiedName.GenericParameters[1].TypeName);

            var targetContextType = TargetAssembly.GetType(assemblyQualifiedName.GenericParameters[0].TypeName);
            var initType = typeof(CreateSecureSeededDatabaseIfNotExists<,>).MakeGenericType(
                targetContextType,
                seedDataType);

            return Activator.CreateInstance(initType);
        }
        private object ConstructInitializer()
        {
            var isGalenInitializationType = m_Config.InitializationConfig.Type.EndsWith("Galen.Ci.EntityFramework.Initialization");
            if (!isGalenInitializationType)
            {
                Log.Debug(
                    "Configured initializer type of {type} is being loaded from target assembly {targetAssembly}.",
                    m_Config.InitializationConfig.Type,
                    TargetAssembly.FullName);

                return TargetAssembly.CreateInstance(m_Config.InitializationConfig.Type);
            }

            Log.Debug(
                "Configured initializer type of {type} is provided by CI framework. Loading types accordingly.",
                m_Config.InitializationConfig.Type);

            var assemblyQualifiedName = new ParsedAssemblyQualifiedName(m_Config.InitializationConfig.Type);

            var isSecureSeededInitializer =
                assemblyQualifiedName.GenericParameters.Count == 2 &&
                assemblyQualifiedName.CSharpStyleName.Value.Contains("CreateSecureSeededDatabaseIfNotExists");

            if (isSecureSeededInitializer)
            {
                Log.Debug(
                    "Configured initializer of type {type} is a CI based secure seeded initializer. Loading generic types...",
                    m_Config.InitializationConfig.Type);
                return GetSecureSeededInitializer(assemblyQualifiedName);
            }

            var isSecureInitializer =
                assemblyQualifiedName.GenericParameters.Count == 1 &&
                assemblyQualifiedName.CSharpStyleName.Value.Contains("CreateSecureDatabaseIfNotExists");

            if (isSecureInitializer)
            {
                Log.Debug(
                    "Configured initializer of type {type} is a CI based secure non-seeded initializer. Loading generic types...",
                    m_Config.InitializationConfig.Type);
                return GetSecureInitializer(assemblyQualifiedName.GenericParameters.Single().TypeName);
            }

            return !assemblyQualifiedName.GenericParameters.Any() 
                ? Type.GetType(m_Config.InitializationConfig.Type) 
                : null;
        }