저는 Asp.net core
의존성 주입으로 시작하고 있습니다. 내 개념이 부정확 할 수 있습니다. This docs.asp.net post 컨트롤러에 컨텍스트를 주입하는 방법을 설명합니다. 나는 테스트 관점에서 주입에 관한 혼란이 거의 없다. core
이 같은 내장 기능이 제공 무엇 asp.net의존성을 프로그래밍 방식으로 프로그래밍 asp.net 코어
public class TasksController : Controller
{
public ITasksRepository TaskItems { get; set; }
public TodoController(ITaskRepository taskItems)
{
TaskItems = taskItems;
}
//other logic
}
우리는 의존성을 등록 할 수 있습니다 :로
이public interface ITasksRepository
{
public void Create();
}
//This is fake implementation, using fake DbContext for testing purpose
public class TasksRepositoryFake : ITasksRepository
{
public void Create()
{
FakeDbContext.Add(sometask);
//logic;
}
}
//This is actual implementation, using actual DbContext
public class TasksRepository : ITasksRepository
{
public void Create()
{
DbContext.Add(someTask);
//logic;
}
}
이제 컨트롤러 컨텍스트를 주입하기 위해, 우리는 그것을 설계 : 우리는 다음과 같은 시나리오를 가정 기동 클래스 주입으로 다음과이 논리에 따르면
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<ITasksRepository, TasksRepositoryFake>();
}
내 TaskRepositoryFake
컨트롤러에 주입한다. 지금까지 모든 것이 명확합니다.
질문 : 나는 몇 가지 논리를 사용하여 컨텍스트를 주입하는이 내장 된 DI 기능을 사용할 수 있습니다 어떻게
- 다음과 같이이에 대한 내 질문/혼란은? 프로그래밍 방식 또는 구성 기반 또는 환경 기반 일 수 있습니까? (예 : '테스트'환경을 사용할 때 가짜 컨텍스트를 삽입하십시오.)
- 심지어 가능합니까? StartUp 클래스에서이 값을 수동으로 변경해야한다면 DI 내장 기능이 어떻게 작동합니까? 왜냐하면 우리는이 기능없이 컨트롤러에서 간단하게 할 수 있었기 때문입니다.
감사 대니 :
옵션 3 구성 기준으로합니다. 제안을 구현하려고하지만 이상한 오류가 발생합니다. (아마 당신의 논리에 있지는 않지만 내 편이라.) 일단 성공하면, 대답을 표시 할 것입니다. 그리고 오류는 : .. .. TaskRepositoryFake와 TaskRepository' 사이에 암묵적인 변환이 없습니다. 나는 정확히 내가 말한 것과 같은 구현을 가지고있다. 나는이 특정한 시나리오에서 이것을 허락한다면 내 말을 들으면서 다시 한번 확인해 볼 수있다. – Zeeshan
이제 ITaskRepository가 클래스라는 것을 알았습니다. 인터페이스라고하셨습니까? 그것보다 위의 코드를 정확히 복사하지 않은 것 같습니다. 왜냐하면 내 코드 라인에서는 결코 TaskRepository를 TaskRepositoryFake (또는 그 반대로)로 변환하려고 시도하지 않기 때문입니다. 따라서 신중히 확인하십시오. –
여기에는 오타가 있습니다. 'ITaskRepository'는 실제로 인터페이스입니다. 그렇지 않으면 클래스는 메서드 시그니처뿐만 아니라 정의도 가질 수 없으므로 컴파일 오류가 발생합니다. 난 정확히 당신이 제공 한 논리를 사용하고 있지만 여전히 오류 :(.. 기술적으로, 거기에 'TaskRepository'과'TaskRepositoryFake', 모두'ITaskRepository' 인터페이스를 구현하는 등의 오류가 있어서는 안됩니다. – Zeeshan