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; }