Mam ASP.NET MVC Web Application 5 i Startup.cs widzę, że własność publicznaPrzechodząc ciąg połączenia aplikacji do repozytorium Class Library w ASP.NET 5 Korzystanie z IConfigurationRoot
IConfigurationRoot Configuration
jest jest ustawiona na builder.Build();
całym aplikacji Web MVC mogę po prostu zrobić
Startup.Configuration["Data:DefaultConnection:ConnectionString"]
uzyskać Conn ciąg f rom z pliku appsettings.json
.
Jak mogę uzyskać ciąg połączenia określony w ASP.NET 5 MVC appsettings.json
przekazany do mojej biblioteki klas Repozytorium za pomocą wstrzyknięcia konstruktora?
UPDATE:
Oto repozytorium podstawa, że wszystkie inne repozytoria dziedziczyć (jak widać mam ustalony ciąg połączenia tu na razie):
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;
}
}
W moim asp.net 5 aplikacji internetowych w moim pliku appsettings.json mam następujące, które jest równoznaczne z dodaniem ciąg połączenia w pliku web.config w .net 4.5 webapp:
"Data": {
"DefaultConnection": {
"ConnectionString": "Server=MYSERVER;Database=MYDATABASE;Trusted_Connection=True;"
}
}
Dodatkowo wm y asp.net aplikacja 5 web Mam następujący kod domyślny w moim Startup.cs który ładuje konfigurację witryn do własności publicznej typu 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();
}
Teraz w mojej aplikacji sieci web ASP.NET, czy chciałbym aby uzyskać dostęp do którejkolwiek z appSettings mogę prosty wykonaj następujące czynności: Startup.Configuration["Data:DefaultConnection:ConnectionString"]
Ale niestety nie mogę tego zrobić z mojej klasy biblioteki ..
Jeśli ktoś chce spróbować i rysunek to tutaj są kroki odtworzyć:
- Utwórz nową aplikację sieci Web ASP.NET 5 MVC.
- Dodaj do projektu kolejny typ biblioteki klas (pakiet).
- wymyślić sposób przekazać AppSettings z ASP.NET MVC App 5 do Class Library
Po aktualizacji wciąż nie dość je zdobyć. Tu jest mój kodu:
public class BaseRepo
{
private readonly IConfigurationRoot config;
public BaseRepo(IConfigurationRoot config)
{
this.config = config;
}
}
Deklaracja ta klasa nie działa od BaseRepo wymaga param konstruktora teraz.
public class CustomerRepo : BaseRepository, ICustomerRepo
{
public Customer Find(int id)
{
using (var connection = GetOpenConnection())
{
...
}
}
}
Nie powinieneś przepuszczać łańcucha połączenia, powinien on być określony w pliku web.config i powinieneś go pobrać w jednym miejscu w kodzie aplikacji. Gdziekolwiek ten pojedynczy punkt jest, powinien być traktowany jako zależność w obrębie klas, które tego wymagają. – Luke
W ASP.NET 5 nie ma Web.Config i rzeczy są wykonane nieco inaczej. Wiem, jak ustawić ciąg połączenia w mojej aplikacji internetowej, ale wierzę w ASP.NET 5 mogę przekazać go do mojej biblioteki klas Repozytorium danych przy użyciu wtrysku konstruktora. –
Właśnie nauczyłeś mnie czegoś nowego. Nie zdawałem sobie sprawy, że app.config zniknął, jestem najnowszą wersją. Czas, abym poszła i dowiedz się więcej ...: o) – Luke