2016-07-13 11 views
1

私は、Entity Framework Coreを使用してASP.NETコアに構築している新しいアプリケーションを用意しました。アプリケーションには、UI、モデル、ビジネス、およびデータ層があります。以前のバージョンのASP.NETでは、web.configに接続文字列を設定することができ、既定では参照された層で使用できるようになりました。これは、appsettings.json(または他の設定オプション)を使用してASP.NETコアで同じケースではないようですか?これがどのように成し遂げられたのか?データ層にdbcontextを設定しましたが、現在接続文字列をハードコーディングしています。Entity Frameworkコアを持つデータ層のappsettings.jsonからのConnectionString

私が見てきたすべての例では、startup.csのUIレイヤーにdbcontextが設定されています。これは私が避けようとしていることです。

質問Hereが降りました。

答えて

7

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); 
} 

今、あなたのWebアプリは、あなたのビジネス/サービス層への参照を必要とし、それがEntityFrameworkに直接依存ではありません。

+0

これは私が探していたものです。ありがとうございました! –

+0

素晴らしいですが、それを受け入れられた回答としてマークできますか? –

+0

どういうわけか私はエラーが発生します。 AddMyServiceDependenciesのすべてのコードパスの戻り値ではありません –

関連する問題