0
을 사용하면 작은 MVC 코어 응용 프로그램 (예 : Entity Framework Core 및 MongoDB가있는 경우)없이 두 데이터베이스 엔진 사이를 전환 할 위치가 있다고 할 수 있습니다. 내 appsettings.json에서MVC 핵심 프로젝트에서 데이터베이스 컨텍스트를 삽입하면
, 나는 다음과 같은 노드가 : 내 Startup.cs에서 다음
{
"UseMongo": false,
"MongoDB": {
"ConnectionString": "mongodb://127.0.0.1",
"DatabaseName": "CoreDB",
"IsSSL": true
},
"EntityDB": {
"ConnectionString": "mongodb://127.0.0.1",
"DatabaseName": "CoreDB"
}
}
을 나는 다음과 같은 코드를 가지고 : 다음 인터페이스를 선언
if (Configuration.GetValue<bool>("UseMongo"))
{
MongoDbContext.ConnectionString = Configuration.GetSection("MongoDB:ConnectionString").Value;
MongoDbContext.DatabaseName = Configuration.GetSection("MongoDB:DatabaseName").Value;
//Somehow inject context into application so it is available globally
}
else
{
EfDbContext.ConnectionString = Configuration.GetSection("EntityDB:ConnectionString").Value;
EfDbContext.DatabaseName = Configuration.GetSection("EntityDB:DatabaseName").Value;
//Somehow inject context into application so it is available globally
}
을하는에서 두 개의 저장소 클래스가 파생됩니다.
public interface IRepository : IDisposable
{
void GetData();
}
public class EfRepository : IRepository
{
public void GetData()
{
//DB logic
}
}
public class MongoRepository : IRepository
{
public void GetData()
{
//DB logic
}
}
지금까지 그렇게 좋았습니다. 이제는 appsettings.json의 "UseMongo"스위치에 따라 저장소 클래스를 사용하고 싶습니다. 나는 의존성 주입을 조금 보았지만 해결책을 찾지 못했습니다. 내 컨트롤러에서이 작업을 수행 할 수 있기를 원합니다.
public class ValuesController : Controller
{
private IRepository _repository;
public ValuesController(IRepository repository)
{
_repository= repository;
}
}
이 작업을 수행 할 수 있습니까?
그냥 하나 개의 질문과 같이 할 수있다 :이 좋은 방법인가? DbContext가 삽입 된 위치에서 읽은 모든 예제는 컨텍스트를 주입하기 위해 services.AddDbContext를 사용합니다. – LeonidasFett
DbContext의 인스턴스를 어떻게 작성하고 있습니까? 리포지토리에 생성하거나 DI를 사용하여 주입합니까? DI를 사용하는 경우 AddDbContext 메소드를 추가 할 수 있습니다. – Anuraj
아직 그 부분을 구현하지는 않았지만 저장소 클래스에서 인스턴스화 할 계획이므로 올바르게 이해하면 AddDbContext를 사용하지 않아도 괜찮을 것으로 생각됩니다. – LeonidasFett