2016-12-20 7 views
1

自己作成サービスのデータベースコンテキストにアクセスできますか?その下のコードで、私はexampleClassServiceのコンストラクタを使ってデータベースコンテキストを設定します。 "デフォルト" のasp.netコアでconfigureServicesのサービスにデータベースコンテキストを追加する

Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    //Add MVC 
    services.AddMvc(); 

    //Postgres connection 
    var connectionString = Configuration["ConnectionStrings:PostgresConnection"]; 
    services.AddDbContext<ApplicationDbContext>(
     opts => opts.UseNpgsql(connectionString) 
    ); 

    //Own created service 
    services.AddSingleton<ExampleClassService>(
      provider => new ExampleClassService(dbcontext?); 

    ... 
} 

答えて

3

あなたExampleClassServiceは次のようにコンストラクタを持っている場合:

public ExampleClassService(ApplicationDbContext dbContext) 

あなたは必要ありません。特別な工場を追加する - このパラメータはDIレイヤーによって自動的に注入されます(bec

services.AddSingleton<ExampleClassService>(
    provider => new ExampleClassService((ApplicationDbContext)provider.GetService(typeof(ApplicationDbContext))); 

しかし:auseあなたはすでに自分のサービスはいくつかの "特別な" コンストラクタを持っている場合は、必要な依存関係を取得するためにproviderのparamを使用services.AddSingleton<ExampleClassService>()

を書き、それ以前ApplicationDbContext)を登録しました!サンプルでApplicationDbContextを "スコープ"、ExampleClassServiceを "シングルトン"として登録しています - シングルトンクラス(アプリケーション全体で1つ)ExampleClassServiceを使用することができるかどうかは、他の(DbContext)クラスを使用することができますか?各スコープ/リクエストごとに異なる必要がありますか?

ここでは、デザインエラーがあります。ExampleClassServiceも "スコープ"にする必要があります。でない場合は、にコンストラクタでDbContextが必要です。

+0

答えのためのThxs。できます! PS:アドバイスのための興味深いノートthxs;) – Wouter

関連する問題