ASP.NET 5 类库中的 Startup.cs

veb*_*bbo 7 c# asp.net-mvc asp.net-core-mvc

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

注入AppSettings抛出DbContext异常

InvalidOperationException: Unable to resolve service for type 'Beo.Dal.Properties.AppSettings' while attempting to activate 'Beo.Dal.DataContexts.ApplicationDbContext'.
Run Code Online (Sandbox Code Playgroud)

数据库上下文

private static bool IsCreated;
private AppSettings AppSettings;

public ApplicationDbContext(AppSettings settings)
{
    AppSettings = settings;
    if (!IsCreated)
    {
        Database.AsRelational().ApplyMigrations();
        IsCreated = true;
     }
 }
Run Code Online (Sandbox Code Playgroud)

我是否错过了什么或者我全错了?我已经Startup.cs在 MVC 项目中得到了一个,并且运行良好。我可以在类库中使用它吗?如果不是,我应该如何加载这个 .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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*hen 5

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

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