【发布时间】:2015-12-15 13:18:54
【问题描述】:
我需要使用默认用户为应用程序数据库播种。我在这个项目中没有使用 Entity Framework,我决定改用 Dapper。
我能做的最简单的事情是使用Seed() 静态方法创建一个像DatabaseConfig(或AccountsConfig)这样的简单类:
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类。我不希望它随着时间而改变,但这仍然是一个依赖项。我应该解决它吗?我该如何解决?
【问题讨论】:
标签: c# .net asp.net-mvc dependency-injection dapper