2017-03-27 11 views
0

私はMVCコアで作業している新しいMVCプロジェクトに、優れたデータベースライブラリNReco.Dataを使用しています。Dot Netコアのデータベース接続の依存関係注入について理解しています

私は可能な限り依存性注入を使用しようとしています。しかし、混乱しているのはこれです。私のStartup.csの下のコードに基づいて、別のデータベース(または接続文字列)を指す別のDbDataAdapterをどのようにインスタンス化できますか?

public void ConfigureServices(IServiceCollection services) 
{ 
    var dbconnectStringAppSettings = Configuration["DBConnectString"]; 
    services.AddDbContext<MisoIRListservDbContext>(options => options.UseSqlServer(dbconnectStringAppSettings)); 

    InjectNRecoDataService(services); 

    // Repositories 
    services.AddScoped<ListSettingRepository>(); 
    services.AddScoped<ListCategoryRepository>(); 
    services.AddScoped<MailingListRepository>(); 
    services.AddScoped<LISTSERVRepository>(); 

    // Services 
    services.AddScoped<ListServEmailMailingListService>(); 
    services.AddScoped<ListCategoryMailingListService>(); 

    services.AddMvc();   

} 

private void InjectNRecoDataService(IServiceCollection services) 
{ 
    services.AddSingleton<IDbFactory, DbFactory>(servicePrv => new DbFactory(SqlClientFactory.Instance) 
    { 
     LastInsertIdSelectText = "SELECT @@IDENTITY" 
    }); 
    services.AddSingleton<IDbCommandBuilder, DbCommandBuilder>(servicePrv => 
    { 
     var dbCmdBuilder = new DbCommandBuilder(servicePrv.GetRequiredService<IDbFactory>()); 
     return dbCmdBuilder; 
    }); 
    services.AddScoped<IDbConnection>(servicePrv => 
    { 
     var dbCoreContext = servicePrv.GetRequiredService<MisoIRListservDbContext>(); 
     var conn = dbCoreContext.Database.GetDbConnection(); 
     return conn; 
    }); 
    services.AddScoped<DbDataAdapter>(); 
} 
+0

マルチテナントデータアーキテクチャを調べます。 http://benfoster.io/blog/aspnet-core-multi-tenancy-data-isolation-with-entity-framework –

答えて

1

私の見解では、SQL接続のようなデータベース固有のものはIoCコンテナに入れないようにしています。ライフサイクルを管理する他の問題と並んで、あなたが直面している非常に大きな問題が発生します。

は、それはそれのすべてをカプセル化し、詳細を忘れて外の世界を作るリポジトリ(リポジトリパターン)と呼ばれるクラス内のすべてのデータベース関連のものを維持するために多くの良いです - あなたはそれインタフェース与えると、それを簡単にIoCコンテナに入れて交換することができます(例えば単体テストの場合)。ドメインのさまざまな領域に異なるリポジトリを作成したいと考えています。

最終的に、異なるリポジトリ間のトランザクションを含むより高度なシナリオの作業パターンを調べることも必要です。

関連する問題