來自具有實體框架核心的數據層中的appsettings.json的ConnectionString

asp.net-core asp.net-core-mvc entity-framework-core

我有一個新的應用程序,我正在使用Entity Framework Core構建ASP.NET Core。該應用程序具有UI,模型,業務和數據層。在以前的ASP.NET版本中,您可以在web.config中設置連接字符串,默認情況下它將在引用的層中可用。在使用appsettings.json(或其他配置選項)的ASP.NET Core中,這似乎不是相同的情況?有關如何實現這一點的任何想法?我在數據層中配置了dbcontext,但我目前正在對連接字符串進行硬編碼。

我看到的所有示例都在startup.cs的UI層中配置了dbcontext。這就是我想要避免的。

這個問題在這裡得到了主題。

一般承認的答案

您可以輕鬆地將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。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow