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:
- Erstellen Sie eine neue ASP.NET 5 MVC-Web-App.
- Fügen Sie ein weiteres Projekt vom Typ Class Library (Paket) für das Projekt.
- 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
auf Ihrem Start.cs-Datei fügen Sie die folgende Methode
dann aktualisieren Sie Ihre BaseRepo Klasse wie diese
InformationsquelleAutor der Antwort Manos Pasgiannis
ASP.NET eine eigene Weg dar, um Konfigurationseinstellungen.
Angenommen, Sie haben dies in Ihrem appSettings.json:
Dann brauchst du eine Klasse wie folgt aus:
Dies ermöglicht es Ihnen, konfigurieren Sie Ihr service mit dieser Konfiguration, indem Sie die folgende Zeile hinzufügen
zu
ConfigureServices
.Können Sie dann injizieren Sie die Konfiguration in Konstruktoren folgt:
Diesem Beispiel ist für die Controller. Aber Sie können das gleiche tun mit anderen Schichten von Sie Anwendung.
InformationsquelleAutor der Antwort Chrono
Habe ich einen Konstruktor in meiner repository-Klasse, die akzeptiert die db-Verbindungszeichenfolge als parameter. Dies funktioniert für mich, wenn ich meine repository für die Injektion. In ConfigureServies() an den Start.cs-Datei hinzufügen:
IRepos.cs
ist die SchnittstelleRepos.cs
ist die Klasse, die es implementiert. Und natürlich die Konfiguration ist nur ein Verweis auf das integrierteIConfigurationRoot
Objekt.InformationsquelleAutor der Antwort Matthew Allen
Wenn
ConfigureServices
in Ihr ProjektstartUp.cs
enthältund Ihrer repository-cs-Datei mit Konstruktor-injection, wie unten gezeigt
YourDbContext
werden automatisch aufgelöst.InformationsquelleAutor der Antwort Prashant Lakhlani
Gibt es bereits eine extension-Methode, die Sie verwenden können, um Verbindungszeichenfolgen, die speziell von aspsettings.json.
Definieren Sie Ihre connection strings in der App.json-so:
In Ihrem
public void ConfigureServices(IServiceCollection services)
Methode in IhremStartup.cs
können Sie den connection-string wie diesen:GetConnectionString
Erweiterung vonMicrosoft.Extensions.Configuration
.UPDATE
Ich wollte nicht in die details gehen auf den ersten, weil hier die Frage schon als beantwortet markiert. Aber ich denke, ich kann zeigen, meine 2 Cent hier.
Wenn Sie brauchen die ganze
IConfigurationRoot
Objekt injiziert Controller, @Chrono zeigte den richtigen Weg.Wenn Sie brauchen nicht das gesamte Objekt, Sie sollten nur die Verbindungszeichenfolge, pass es in der DbContext innerhalb der
ConfigureServices()
nennen, und injizieren Sie dieDbContext
in Controller. @Prashant Lakhlani zeigte es richtig.Bin ich nur sagen, @Prashant Lakhlani post, die Sie verwenden können
GetConnectionString
Erweiterung statt, um den code zu bereinigen ein wenig.InformationsquelleAutor der Antwort David Liang
Was Sie brauchen, ist, eine Klasse zu erstellen in der Klasse-Bibliothek-Projekt für den Zugriff auf die appsettings.json in der website-Projekt-und return-Anschluss string.
InformationsquelleAutor der Antwort samvietnam