종속성 주입을 사용하고 있으며 알아낼 수없는 것에 대비하여 왔습니다.종속성 주입, 상속 및 generics
public class BaseClass
{
public BaseClass(ILogger<BaseClass> logger)
{
// code here
}
}
그런 다음 나는 또한 일반 로거를 필요로하는 클래스 상속이 : 나는 일반적인 로거를 필요로하는 기본 클래스가
public class SubClass : BaseClass
{
public SubClass(ILogger<SubClass> logger)
{
// code here
}
}
문제는이 메시지와 함께 컴파일되지 않는다는 것입니다; BaseClass에는 0 개의 인수를 취하는 생성자가 포함되어 있지 않습니다..
이 내가 할 수있는 경우 해결하기 쉬운 것입니다이 :
public SubClass(ILogger<SubClass> logger) : base(logger)
문제는이 정당하지 않은 중 하나 ILogger<SubClass>
이후 ILogger<BaseClass>
의 인스턴스 (이 로 가장 과부하가 컴파일되지 않습니다이되지 않는 것입니다 ...에 대한 일부 잘못된 인수가 있습니다).
한 가지 가능한 솔루션 : 은 내가 생성자 주입을 사용하는 대신 DependencyResolver
를 사용할 필요가 없습니다 같아요.
질문 : 분명히 다른 사람이 전에이 문제에 대해 제기 한 적이 있습니까? 생성자 삽입 작업이 가능합니까? 그렇다면 무엇을해야합니까?
참고 : 현재 프로젝트에서 나는 StructureMap
(for MVC4)를 사용하고,하지만 난 여기에이 도구는 약간 관련이 있다고 생각합니다.
동일한 작업을 수행하기 위해 서로 다른 클래스에 동일한 종속성을 주입하는 경우에는 차단을 살펴볼 수 있습니다. –
@FacioRatio 당신의 통찰력에 감사드립니다. 이후에 나는 매우 흥미로 웠던 http://programmers.stackexchange.com/questions/139111/interception-vs-injection-a-framework-architecture-decision을 읽었다.다른 곳에서 언급했듯이,'ILogger'은 DI를 통해 이미 많은 다른 솔루션과 프로젝트에서 사용되고 있습니다. 그러나 미래의 솔루션을 위해서는 고려해야 할 가치가 있습니다. –
Halvard
장식은 좋지만, 같은 일을하는 많은 데코레이터로 끝나면, 차단의시기입니다. 참조 : http://simpleinjector.codeplex.com/wikipage?title=Advanced-Scenarios#Interception –