ASP.NET Core 8 Blazor 服务器应用程序 - 无法找到合适的构造函数

问题描述 投票:0回答:1

我尝试了多种方法,但没有成功,从

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;
    }
}
configuration blazor-server-side appsettings asp.net-core-8
1个回答
0
投票

您可以遵循的完整工作演示:

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.