我有一个新的应用程序,我正在使用Entity Framework Core构建ASP.NET Core。该应用程序具有UI,模型,业务和数据层。在以前的ASP.NET版本中,您可以在web.config中设置连接字符串,默认情况下它将在引用的层中可用。在使用appsettings.json(或其他配置选项)的ASP.NET Core中,这似乎不是相同的情况?有关如何实现这一点的任何想法?我在数据层中配置了dbcontext,但我目前正在对连接字符串进行硬编码。
我看到的所有示例都在startup.cs的UI层中配置了dbcontext。这就是我想要避免的。
Here问题摆脱了主题。
答案 0 :(得分:9)
您可以轻松地将IServiceCollection的扩展方法添加到您的业务/服务层,并使用它来注册自己的依赖项。然后在启动时,您只需在服务层上调用该方法,而无需在Web应用程序中引用EntityFramework。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
namespace your.service.layer
{
public static class MyServiceCollectionExtensions
{
public static IServiceCollection AddMyServiceDependencies(this IServiceCollection services, string connectionString)
{
services.AddEntityFrameworkSqlServer()
.AddDbContext<YourDbContext>((serviceProvider, options) =>
options.UseSqlServer(connectionString)
.UseInternalServiceProvider(serviceProvider)
);
return services;
}
}
}
启动:
using your.service.layer;
public void ConfigureServices(IServiceCollection services)
{
var connectionString = Configuration.GetConnectionString("EntityFrameworkConnectionString");
services.AddMyServiceDependencies(connectionString);
}
现在,您的网络应用仅需要对您的业务/服务层的引用,并且它不直接依赖于EntityFramework。