MVC 5 웹 응용 프로그램의 자동 스캐 폴딩 컨트롤러에서 종속성 삽입을 사용하는 방법을 배우려합니다. "Dependency Injection"과 "Unity"에 대한 자습서를 찾았지만 필자가 보았던 예제는 더 많은 세상의 다양성과 컨트롤러의 데이터베이스 컨텍스트를 다루는 데 실제로 사용되지 않습니다.리포지토리가없는 DbContext의 종속성 삽입
내게 무슨 뜻인지에 대한 더 나은 예를 들어주기 위해 내가 가진 것과 앞으로 무엇을 하려는지에 대한 코드 스 니펫이 있습니다.
Visual Studio를 사용하여 "Entity Framework를 사용하여 뷰가있는"컨트롤러를 자동으로 스캐 폴딩 할 때 이는 일반적으로 만들어지는 것입니다. 나는 의존성 삽입 (Dependency Injection)을 사용하여, 지금까지 읽은 내용에서
public class TideUploadsController : Controller
{
// This is the EF Database context placed by the auto-scaffolder
private AzMeritContext db = new AzMeritContext();
[HttpGet]
public ActionResult Index()
{
return View(db.TideUploads.ToList());
}
/* further CRUD ActionResults not shown */
}
}
, 내가 대신 클래스의 인터페이스를 호출하는 생성자를 사용해야합니다. Entity Framework에서 저장소를 래핑하는 것에 대한 여러 가지 리뷰를 읽었습니다. 저장소를 사용하지 않고이 작업을 수행 할 수 있는지 확인하고 싶습니다.
자동 스캐 폴더에 의해 코드에 삽입 된 DbContext 대신 사용해야하는 기존 인터페이스가 있습니까?
// This is the EF Database context placed by the auto-scaffolder
private AzMeritContext db = new AzMeritContext();
public TideUploadsController(/* what Interface goes here? */)
{
//db = ?
}
또는이 상황이 정말 Entity Framework dbContext 주위의 저장소를 래핑해야하는 상황입니까?
나는 책을 읽고 튜토리얼과 비디오를 통해 검색 지난 몇 주 동안 있고, 아직 같은 것을 보여주는 단계별 예를 보지 못했다 :
- 1 단계 : 컨트롤러를 가지고 당신이 자동으로 스캐 폴딩 한 것
- 2 단계 : 수행하십시오 ...
- 단계 n : 컨트롤러가 단단히 결합 된 것이 아니라 데이터베이스 컨텍스트와 느슨하게 결합되어 있습니다.
리포지토리에 대한 모든 논점에 대해 내가 아직도 보았던 한 가지 단점은 추가적으로 많은 타이핑이 포함된다는 것입니다. 일반적인 저장소 인터페이스의 예제를 찾았지만 generic 리포지토리를 아직 보지 못했기 때문에 모든 컨텍스트 및 모델 쌍을 생성자에 삽입하고 동일한 동사 (get, insert 등)를 사용할 수 있습니다. 정말로 일반적인 저장소에 대한 아이디어가 있습니까? –
아마도 "일반 저장소"를 만들고 생성자에서 DBContext 삽입을 수행해야합니다.이 아이디어는 http://blog.gauffin.org/2013/01/repository-pattern-done-right/와 당신은 거기에 쓰기 및 많은 데이터베이스 액세스를 래핑하는 코드가 많이있다. –