나는이처럼 보이는 ApiController에 방법이있다.Asp.Net 웹 API - 매개 변수 바인딩/서식 지정을위한 특성이 없습니까?</p> <pre><code>public IEnumerable<Items> GetSlideSets() { IServiceClass serviceClass = new ServiceClass(); //... </code></pre> <p>예, 나는 이것이 좋은 디자인이 아니라 내가 다른 반복에서이 문제를 해결하고있어 것을 알고 :
내 응용 프로그램의 특정 시점에서 프로젝트 내에서이 기능을 호출해야하므로 컨트롤러를 재사용 할 수 있다고 생각했습니다. 왜 IoC 컨테이너에서 컨트롤러를 제거 할 수 있습니까?
public IEnumerable<Items> GetSlideSets(IServiceClass serviceClass = null) {
serviceClass = serviceClass ?? new ServiceClass();
//...
을 지금은 무엇입니까 오류를 제외하고 일반 API 호출 Optionalparameter 'serviceClass' is not supported by FormatterParameterBinding
를 통해이를 호출 할 때 : 유일한 문제는이 경우에, 나는 IServiceClass
충분히 쉽게 내 자신의 구현을 주입 할 필요가 있다는 것입니다.
바인딩을 제어하는 다양한 속성이 있다는 것을 알고 있습니다. 바인딩해서는 안되는 매개 변수를 넣을 수 있습니까?
당신이 컨트롤러의 범위 대신의 작용 방식에'serviceClass'를 이동할 수 : 당신은 그냥 나중에 매개 변수에 속성을 적용 할 필요가
: 여기 것처럼 볼 수 있었다 무엇 네가 지금 가지고있는 범위? –
IoC는 일반적으로 개체 생성시 발생하므로 IServiceClass 매개 변수는 메서드 매개 변수가 아닌 생성자 매개 변수 (개인 인스턴스 필드에 복사하여 거기에서 사용) 여야합니다. 그가 말한 것. – ChrisF
그러면 ServiceClass가 모든 컨트롤러 메서드 호출에 대해 초기화됩니다. 더 나은 아키텍처에서는 이것이 문제가되지 않지만, 이것은 프로토 타입이 살아 있고 라우팅과 컨트롤러 리팩토링 같은 것들이 또 다른 반복을위한 것입니다. @ChrisF - 네가 맞아,이 부분은 IOC가 아니라 그냥 규칙적인 DI이다. 매개 변수를 통해 의존성을 주입하고있다. 비슷한 결과를 얻을 수있는 속성을 통해 주입 할 수도 있지만 속성을 구체적으로 찾고 있습니다. –