2017-10-10 2 views
0

ich einige alte Software .Net Kern Migration 2.0 ...Dependency Injection: Injizieren Konfiguration in .Net Core 2.0

Ich mag würde eine Verbindungszeichenfolge in meiner Klasse DBActivityRepository von einer Basisklasse injizieren. ..

Soll ich die Konfiguration bei der Erstellung der Basisklasse nur passieren

this._DBHandler = new DBHandler(configuration); 

oder ist es besser, es auf diese Weise zu tun:

private DBHandler _DBHandler; 
private string connectionString; 
public DBActivityRepository(IConfiguration configuration) : base(configuration) 
{ 
    // **Do I need this?** 
    this._DBHandler = new DBHandler(configuration); 
    connectionString = this._DBHandler.GetConnectionString(); 
} 

Danke

+0

https://www.codeproject.com/Articles/1204089/ASP-NET-Core-Dependency-Injection – Ramankingdom

+0

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/ Abhängigkeitsinjektion – Ramankingdom

Antwort

0

Wenn DBHandler Ihre Basisklasse ist und DbActivityRepository eine Unterklasse von DBHandler ist, ist es nicht notwendig, eine Instanz von DBHandler im DBActivityRepository zu erstellen. Sie können ihre öffentlichen und geschützten Methoden/Eigenschaften direkt verwenden (Vererbung), etwa so:

public interface IConfiguration 
{ 
    string GetConnectionString(); 
} 

public abstract class DbHandler 
{ 
    protected DbHandler(IConfiguration configuration) 
    { 
     ConnectionString = configuration.GetConnectionString(); 
    } 

    protected string ConnectionString { get; } 
} 

public class DbActivityRepository : DbHandler 
{ 
    public DbActivityRepository(IConfiguration configuration) 
     : base(configuration) 
    { 
    } 

    private void DoSomething() 
    { 
     // use your connStr 
     Console.Write(ConnectionString); 
    } 
} 
0

Für Abhängigkeitsinjektion in asp.net Kern müssen Sie eingebaute DI-Engine verwenden. Zuerst müssen Sie appsetting.json erstellen.

"ConnectionStrings": { 
    "NameOfContext":"server=localhost;userid=root;password=password;" 
} 

Zweitens, erstellen Sie Optionen Typ für Verbindungszeichenfolgen und andere Eigenschaften, was Sie aus appsettings.json lesen müssen.

Für IServiceCollection Dienste lesen Objekte appsettings.json:

services.Configure<YourServiceOptions>(_config["ConnectionStrings:NameOfContext"]) 

Und ist der letzte Schritt, um Ihre DB-Verbindung init:

services.AddDbContext<NameOfContext>(builder => builder.UseMySql(options.ConnectionString)); 

Dies funktioniert nur mit MySql.

+0

@Florian Koch ... Aber in meinem Fall ist der DI in der Klassenbibliothek (DAL), die Klasse wird in einem MVC-Projekt geteilt. Ich muss die Verbindungszeichenfolge in DAL injizieren, um in allen Implementierungen zu zentralisieren. – Cicciux

+0

@Cicciux Sorry, aber das ist nicht meine Antwort, ich habe nur die Formatierung verbessert –

Verwandte Themen