在ASP中启动..NET 5类库

本文关键字:NET 5类库 启动 ASP | 更新日期: 2023-09-27 18:04:35

我创建了一个ASP。. NET类库在我的ASP。NET5应用程序。我想添加Startup.cs文件,以便从。json (ConnectionString)文件加载一些配置,以便在项目中使用它并将其添加到DI。然后我想把AppSettings注入同一个项目的DbContext中。但这是不工作,似乎代码在启动类永远不会执行。

AppSettings注入DbContext引发异常

InvalidOperationException: Unable to resolve service for type 'Beo.Dal.Properties.AppSettings' while attempting to activate 'Beo.Dal.DataContexts.ApplicationDbContext'.

DbContext

private static bool IsCreated;
private AppSettings AppSettings;
public ApplicationDbContext(AppSettings settings)
{
    AppSettings = settings;
    if (!IsCreated)
    {
        Database.AsRelational().ApplyMigrations();
        IsCreated = true;
     }
 }

是我错过了什么还是我完全搞错了?我已经在MVC项目中得到了一个Startup.cs,它工作得很好。我可以在类库中使用它吗?如果不是,我该如何加载这个。json?

这是我在里面实际做的:

public class Startup
{
    public AppSettings Settings { get; set; }
    public IConfiguration Configuration { get; set; }
    public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
    {
        var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
            .AddJsonFile("config.json")
            .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);
        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
        Settings = new AppSettings();
    }
    public void Configure(IApplicationBuilder app)
    {
        string connectionString;
        if (Configuration.TryGet("Data:DefaultConnection:ConnectionString", out connectionString))
        {
            Settings.ConnectionString = connectionString;
        }
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddInstance(Settings);
    }
}

在ASP中启动..NET 5类库

你不能有第二个Startup.cs文件,因为类库不是一个可以启动的项目。您应该做的是利用依赖注入并将DbContext添加到服务中。现在,当您需要为存储库使用DbContext时,它就准备好了。

在Core的DI文档中有一个例子http://docs.asp.net/en/latest/fundamentals/dependency-injection.html#using-framework-provided-services