Startup.cs 在 ASP.NET 5 class 库中

Startup.cs in ASP.NET 5 class library

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

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,它运行良好。我可以在 class 库中使用它吗?如果不是,我应该如何加载它。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);
    }
}

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

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