.NET 프레임 워크에서는 방금 Server.MapPath ()를 사용했을 것입니다. .NET Core 2.2에서는 IHostingEnvironment
. 그러나 내가 찾을 수있는 모든 예는 컨트롤러에서 사용하고 있다고 가정하는 것 같습니다. 그리고이 예제는 컨트롤러에 IHostingEnvironment를 주입하는 것을 말합니다. 그러나...
제 경우에는 일부 * .json 파일을 데이터 저장소로 사용하고 있습니다. 여러 업스트림 위치에서 호출 할 수있는 독립적 인 데이터 액세스 클래스를 만들고 있습니다. 업스트림 호출자에게 영향을주지 않고 IHostingEnvironment를이 클래스에 주입하는 방법을 이해하고 있지 않습니다. 아이디어는 언젠가 .json 파일을 SQL 테이블로 교체하면 데이터 액세스 클래스 만 변경하고이를 호출하는 소스는 변경하지 않으려는 것입니다.
그렇다면 데이터 액세스 클래스에서 로컬 .json 파일에 대한 경로를 어떻게 매핑 할 수 있습니까?
namespace DataAccess
{
public class Repository
{
private readonly string _connStringName;
public Repository(string connStringName)
{
_connStringName = connStringName;
}
public IEnumerable<T> GetList<T>()
{
IEnumerable<T> entities;
using (StreamReader r = new StreamReader(_connStringName)) // <---- ??
{
string json = r.ReadToEnd();
entities = JsonConvert.DeserializeObject<List<T>>(json);
}
return entities;
}
}
}
이 줄 :
using (StreamReader r = new StreamReader(_connStringName))
내가 이해하는 IIS Express의 경로를 매핑하려고합니다. 그러나 파일의 상대 위치에 대한 경로를 매핑하는 데 필요합니다.
감사!
편집하다:
내가 잘못하고있는 것일까? 이것이 내가 본 예를 따르려고 노력한 방법입니다.
public class Repository
{
private readonly string _connStringName;
private IHostingEnvironment _hostingEnvironment;
public Repository(string connStringName, IHostingEnvironment environment)
{
_connStringName = connStringName;
_hostingEnvironment = environment;
}
// rest of the class
}
이렇게하면 Repository
현재 인스턴스를 생성하는 모든 업스트림 위치가 'IHostingEnvironment'를 전달해야합니다.
편집 2 :
어떻게 Repository
사용되고 있습니다.
public static class Customers
{
private static readonly string _connStringName = "customer.json";
public static string Get()
{
DataAccess.Repository repository = new DataAccess.Repository(_connStringName);
List<Customer> customers = repository.GetList<Customer>().ToList();
return JsonConvert.SerializeObject(customers);
}
}
.NET Core에서 시작시 주입 할 종속성을 등록 할 수 있습니다.
이렇게하면 다음을 수행해야합니다.
주사 Repository
로 Customers
.
Repository
Startup에서 종속성 전달
// Startup.cs
public class Startup
{
// ...
public void ConfigureServices(IServiceCollection services, IHostingEnvironment env)
{
// [2]
var connectionString = "customer.json"; // or get from a config file
services.AddSingleton<Repository>(new Repository(connectionString, env));
}
// ...
}
public class Customers
{
private Repository _repository;
public Customers(Repository repository)
{
// [1]
_repository = repository;
}
public string Get()
{
// you can use _repository here without passing stuff in
}
}
public class Repository
{
private IHostingEnvironment _env;
public Repository(string connectionString, IHostingEnvironment env)
{
_env = env;
}
}
.NET Core 종속성 주입-https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore- 2.2
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다