2

モジュールを使ってレイヤーをまとめました。 endeffectsのおかげです。 Here is the HowTo DALレイヤーで接続文字列を使用できるようにしようとしています。私は登録してみました:N-Tierで利用可能な接続文字列を作成する方法ASP.NET MVC 1.0のアプリケーション(Autofac付き)

Configuration (Microsoft.Extensions.Configuration) 

スタートアップクラスからではなく、任意の成功なし。

私たちの助けをいただければ幸いです、おかげでステファン

答えて

1

私はstartup.csの私ConfigureServicesメソッドに次の行を持っている:

services.AddSingleton(serviceType => Configuration); 
services.AddInstance<Microsoft.Extensions.Configuration.IConfiguration>(Configuration); 

builder.Populate(services); 
var container = builder.Build(); 
var serviceProvider = container.Resolve<IServiceProvider>(); 
return serviceProvider; 

はその後、私のDALに、私のようなコンストラクタ注射を経由していることへのアクセス:

public MyDataContext(IConfiguration configurations) 

私はその後のようにその項目にアクセスし、自分の接続情報を引き出すことができます

configurations["Data:MyConnection:ConnectionString"] 
+0

ありがとう@Jeremy Armstrongしかし、私はautofacを使用していますが、ASP.NET CoreのDIではありません。しかし、私は基本的にautofaceで同じことを試しています。 – stevo

+0

あなたのサービスをあなたのautofac builderに移入し、そして適切なサービスプロバイダを返すために残りのコードを使って私の答えを編集しました。 –

+0

もう一度@Jeremy Armstrong !!私はそれを働かせた! – stevo

0

私は接続文字列の名前について何か知っておく必要がある私のDALのファンではありません。私はそれがrepsonsibilityの一部だとは思わない。

だから、例えば私のようなものを作成します::私はDI

いくつかのために
public class SecurityContext : DbContext 
{ 
    public SecurityContext(IConnectionSettings settings) 
    : base (settings.Name) 
    { 
    } 
} 

またはADO.NetとEntity Frameworkのを使用しているときに

public interface IConnectionSettings 
{ 
    public ConnectionStringSettings DataWarehouse { get; } 
    public ConnectionStringSettings Audit { get; } 
    public ConnectionStringSettings Logging { get; } 
    public ConnectionStringSettings Security { get; } 
} 

を私は自分のインターフェースを作成することを好みます奇妙な理由:私のDIで

public class LoggingDataAccess 
{ 
    private readonly string _connectionString; 

    public LoggingDataAccess(IConnectionSettings settings) 
    { 
    _connectionString = settings.Logging.ConnectionString; 
    } 

    public void SomeRawAdo() 
    { 
    using (var con = new Connection(_connnectionstring)) 
    { 
    } 
    } 
} 

public static class IocCOnfig 
{ 
    public static void Start() 
    { 
    var builder = new ContainerBuilder(); 

    builder.Register(r => new ConnectionSettings 
    { 
     DataWarehouse = ConfigurationManager.ConnectionStrings["DataWarehouse"], 
     // etc 
    }); 
    } 

    private class ConnectionSettings : IConnectionSettings 
    { 
    // implement interface... 
    } 
} 
関連する問題