我尝试了多种方法,但没有成功,从
appsettings.json
获取连接字符串。如果这不是最好的方法,什么方法有效?
运行时错误:
System.InvalidOperationException:无法找到类型“App.Services.DataService”的合适构造函数。确保类型是具体的,并且公共构造函数的所有参数都注册为服务或作为参数传递。还要确保不提供无关的参数。
appsettings.json
:
{
"ConnectionStrings": {
"Database1": "Server=_____.____.____;Database=______;Trusted_Connection=True;MultipleActiveResultSets=true;"
}
}
Program.cs
:
builder.Services.Configure<ConnectionStrings>
(builder.Configuration.GetSection("ConnectionStrings"));
builder.Services.AddSingleton<IDataModuleDataService, DataModuleDataService>();
ConnectionStrings.cs
:
public class ConnectionStrings
{
public string Database1 { get; set; }
}
DataService.cs
:
public class DataService : IDataService
{
private readonly ConnectionStrings _connectionStrings;
public DataService(IOptions<ConnectionStrings> connectionStrings)
{
_connectionStrings = connectionStrings.Value;
}
}
您可以遵循的完整工作演示:
1.请务必在Program.c中注册DataService
builder.Services.Configure<ConnectionStrings>(
builder.Configuration.GetSection("ConnectionStrings"));
// Register DataService with dependency injection
builder.Services.AddScoped<IDataService, DataService>();
2.实施服务
public interface IDataService
{
string GetDatabaseName();
}
public class DataService : IDataService
{
private readonly ConnectionStrings _connectionStrings;
public DataService(IOptions<ConnectionStrings> connectionStrings)
{
_connectionStrings = connectionStrings.Value;
}
public string GetDatabaseName()
{
var db = _connectionStrings.Database1;
return db;
}
}
3.Razor组件中调用服务
@page "/"
@inject IDataService DataService
<h3>Data Service Example</h3>
@db
@code {
public string db { get; set; }
protected override async Task OnInitializedAsync()
{
db = DataService.GetDatabaseName();
}
}