我是ASP.net Core的新手,并试图将现有的RESTful WepAPI转换为ASP.Net Core API(2.2)。
以下是我目前的应用程序结构: [WebAPI方法]调用-> [业务逻辑层(BLL)]调用-> [数据访问层(DAL)]。
为了从DAL打开数据库连接,我正在调用另一个类库(Infrstructure.Data.dll)的静态方法,并将连接字符串名称作为Enum传递。该库使用以下命令从webAPI的Web.Config获取实际的连接字符串
string connString = ConfigurationManager.ConnectionStrings[GetDatabaseHint(dbSource)].ConnectionString;
并返回IDbConnection,我的DAL使用该IDbConnection与DB进行交易。
现在,我正在ASP.net核心Web API中寻找类似的选项。
到目前为止,我提出了以下建议:
在API的Startup.cs文件中,添加了 services.AddSingleton(Configuration);
在Infrstructure.Data.dll类库中添加
private static IConfiguration _config;
public ConnectionFactory(IConfiguration config)
{
_config = config;
}
public static IDbConnection GetConnection(DBSource dbSource)
{
string connString = _config.GetConnectionString(GetDatabaseHint(dbSource));
//... Code to create connection using DB Providers
return conn;
}
在此Infrstructure.Data.dll中,IConfiguration始终为空。
如果万一这是不正确的方法,请告诉我,什么是实现此目的的正确方法。
答案 0 :(得分:0)
请按照以下步骤访问IConfiguration
中的Infrstructure.Data
定义ConnectionFactory
public class ConnectionFactory
{
private static IConfiguration _config;
public ConnectionFactory(IConfiguration config)
{
_config = config;
}
public string GetConnection()
{
return _config.GetConnectionString("any connection string name");
}
//public static IDbConnection GetConnection(DBSource dbSource)
//{
// return new dbc
//}
}
在ConnectionFactory
中注册Startup.cs
services.AddScoped<ConnectionFactory>();
使用情况
public class HomeController : Controller
{
private ApplicationDbContext _context;
private readonly ConnectionFactory connectionFactory;
public HomeController(ApplicationDbContext context
, ConnectionFactory connectionFactory)
{
_context = context;
this.connectionFactory = connectionFactory;
}
public IActionResult Index()
{
string result = connectionFactory.GetConnection();
return View();
}
}
注意 IConfiguration
已将WebHost.CreateDefaultBuilder(args)
默认注册为
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}