private ContextTypeInitializerInfo LazyLoadInitializerInfo()
{
var hasInitializer = (m_Config.InitializationConfig != null &&
!string.IsNullOrEmpty(m_Config.InitializationConfig.Type));
if (!hasInitializer)
{
Log.Debug("No initializer specified");
return null;
}
Log.Debug("Loading initializer");
var initializer = ConstructInitializer();
if (initializer == null)
{
throw new InvalidOperationException($"Invalid initializer type specified: {m_Config.InitializationConfig.Type}");
}
var securedInitializer = initializer as ISecureDbWithServiceAccount;
var isSecuredInitializer = (securedInitializer != null);
var hasServiceAccount = (m_Config.InitializationConfig.ServiceAccount != null);
if (!hasServiceAccount && isSecuredInitializer)
{
Log.Warning(
"The context initializer {initializer} implements ISecureDbWithServiceAccount, but " +
"no service account info was configured.", initializer);
}
else if (isSecuredInitializer)
{
var serviceAccount = m_Config.InitializationConfig.ServiceAccount;
LogInitializerServiceAccount(initializer, serviceAccount);
if (m_Config.InitializationConfig.ServiceAccount.AccountType == null)
{
Log.Warning(
"The service account type was null for {initializer}. " +
"This will result in other service account information being ignored.",
initializer);
}
securedInitializer.ServiceAccountName = serviceAccount.Name;
securedInitializer.ServiceAccountDomain = serviceAccount.Domain;
securedInitializer.ServiceAccountDatabaseUserName = serviceAccount.DatabaseUser;
securedInitializer.ServiceAccountDatabaseUserPassword = serviceAccount.DatabaseUserPassword;
securedInitializer.ServiceAccountType = string.IsNullOrEmpty(serviceAccount.AccountType)
? null
: (ServiceAccountType?)Enum.Parse(typeof(ServiceAccountType), serviceAccount.AccountType);
}
else
{
Log.Information("No service account information found.");
}
var initializerContextType = initializer.GetType().BaseType
.GetGenericArguments()
.Single(t => t.IsSubclassOf(typeof(DbContext)));
Log.Debug("Initializer found {initializer} for context {contextType}", initializer, initializerContextType);
return new ContextTypeInitializerInfo(initializerContextType, initializer);
}