Die übergabe Anwendung Verbindung von string nach unten, um eine Repository-Klasse in der Bibliothek ASP.NET 5 IConfigurationRoot

Habe ich eine ASP.NET 5 MVC-Web-Anwendung und starten.cs sehe ich, dass die öffentliche Eigenschaft

IConfigurationRoot Configuration 

wird eingestellt
builder.Build();

Während der MVC-Web-Anwendung, die ich kann einfach nicht

Startup.Configuration["Data:DefaultConnection:ConnectionString"]

bekommen die conn-string aus der appsettings.json Datei.

Wie bekomme ich den connection-string angegeben in der ASP.NET 5 MVC - appsettings.json vergangen, auf meiner Repository-Klasse Bibliothek, die mit constructor injection?

UPDATE:

Hier ist die base-repository, das alle anderen repositories Erben aus (wie Sie sehen können, habe ich eine Feste connection-string in der hier für jetzt):

public class BaseRepo
{
    public static string ConnectionString = "Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;";

    public static SqlConnection GetOpenConnection()
    {
        var cs = ConnectionString;
        var connection = new SqlConnection(cs);
        connection.Open();
        return connection;
    }
}

In meinem asp.net 5 web-Anwendung in meinem appsettings.json Datei habe ich die folgende, die ist gleichwertig mit dem hinzufügen eines connection string zum web.config in einer .net 4.5 webapp:

  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;"
    }
  }

Zusätzlich in meine asp.net 5 web-Anwendung habe ich die folgenden Standard-code in meine Startup.cs, die Lasten der Seiten-Konfiguration in eine öffentliche Eigenschaft mit dem Typ IConfigurationRoot:

 public IConfigurationRoot Configuration { get; set; }
//Class Constructor
        public Startup(IHostingEnvironment env)
        {
            //Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

            if (env.IsDevelopment())
            {
                //For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
                builder.AddUserSecrets();
            }

            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

Nun in meinem asp.net web-Anwendung, wenn ich mag würde, um den Zugriff auf die appsettings kann ich einfach Folgendes tun: Startup.Configuration["Data:DefaultConnection:ConnectionString"]

Aber leider kann ich das nicht aus meiner Klasse Bibliothek.

Wenn jemand will, um zu versuchen und herausfinden hier sind die Schritte zum reproduzieren:

  1. Erstellen Sie eine neue ASP.NET 5 MVC-Web-App.
  2. Fügen Sie ein weiteres Projekt vom Typ Class Library (Paket) für das Projekt.
  3. Herausfinden, einen Weg zu passieren appsettings aus der ASP.NET 5 MVC-App auf die Bibliothek-Klasse

Nach dem Update kann ich es immer noch nicht ganz kapiert. Hier ist mein code:

public class BaseRepo
{
    private readonly IConfigurationRoot config;

    public BaseRepo(IConfigurationRoot config)
    {
        this.config = config;
    }
}

Diese Klasse Erklärung nicht funktionieren, da BaseRepo erfordert einen Konstruktor param nun.

public class CustomerRepo : BaseRepository, ICustomerRepo
{
    public Customer Find(int id)
    {
        using (var connection = GetOpenConnection())
        {
            ...
        }
    }
}

InformationsquelleAutor der Frage Blake Rivell | 2016-01-26

Schreibe einen Kommentar