Мне нужно засеять базу данных приложения пользователями по умолчанию. Я не использую Entity Framework в этом проекте, вместо этого я решил использовать Dapper.Обработка инъекции зависимостей при посеве базы данных
Простейшая вещь, которую я могу сделать, это иметь простой класс, как DatabaseConfig
(или AccountsConfig
) с Seed()
статический метод:
public class DatabaseConfig {
public static void Seed() {
using(var conn = new SqlConnection()) {
conn.ConnectionString = GetConnectionString();
conn.Open();
var query = "insert into users (username, [password]) values (@username, @password)";
var queryParams = new {
username = "Admin",
password = HashedPassword.CreateHash("DefaultSecretKey")
}
conn.Execute(query, queryParams);
}
}
private static string GetConnectionString() {
return ConfigurationManager.ConnectionStrings["appDb"].ConnectionString;
}
}
, а затем вызвать его в Global.asax:
DatabaseConfig.Seed();
у меня есть две зависимости здесь:
Я звоню в
ConfigurationManager
, чтобы получить строку соединения. Я не знаю, плохо ли это. Для других услуг, которые я использую в приложении я передаю строки подключения в качестве параметров конструктора в SimpleInjector инициализаторе:private static void InitializeContainer(Container container) { var appDbConnString = ConfigurationManager.ConnectionStrings["appDb"].ConnectionString; container.RegisterSingleton<IUsersRepository>(new UsersRepository(appDbConnString)); }
Другая зависимость является
HashedPassword
класса. Я не ожидаю, что он со временем изменится, но все же это зависимость. Должен ли я разрешить это? Как мне его решить?