2016-03-27 29 views

Antwort

1

ich in meinem ConfigureServices Methode in startup.cs die folgende Zeile haben:

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; 

Da ist in meinem DAL, ich auf, dass wie über Konstruktor Injektionen :

public MyDataContext(IConfiguration configurations) 

dann kann ich dieses Element zugreifen und meine Verbindung info ziehen wie:

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

Dank @ Jeremy Armstrong, aber ich benutze Autofac und nicht die DI von ASP.NET Core. Aber ich versuche im Grunde das gleiche mit Autoface ... – stevo

+0

Bearbeitete meine Antwort mit dem restlichen Code, um Ihre Dienste in Ihrem Autofac-Builder zu füllen, und dann den entsprechenden Dienstanbieter zurückgeben. –

+0

Nochmals vielen Dank @ Jeremy Armstrong !! Ich habe es funktioniert! – stevo

0

Ich bin kein Fan von meiner DAL, die nichts über den Namen der Verbindungszeichenfolge wissen muss, ich glaube nicht, dass das Teil ihrer Verantwortlichkeit ist. Ich ziehe meine eigene Schnittstelle zu erstellen:

zum Beispiel So würde ich so etwas wie erstellen:

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

Dann, wenn ich mit Entity Framework mit DI

public class SecurityContext : DbContext 
{ 
    public SecurityContext(IConnectionSettings settings) 
    : base (settings.Name) 
    { 
    } 
} 

Oder ADO.Net für einige seltsamen Grund:

public class LoggingDataAccess 
{ 
    private readonly string _connectionString; 

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

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

In meinem DI:

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... 
    } 
}