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
我在 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