IOC 컨테이너를 사용하는 데있어 아직 조금 익숙하며 조금 어려움을 겪고 있습니다. ASP.NET MVC 5.2 Ninject.MVC3 함께 사용하고 있습니다. 기본적으로 로그 서비스에 넘겨주는 예외 필터가 있습니다.ASP.NET MVC의 RegisterGlobalFilters 메서드 내에서 종속성 삽입 수행 방법
public class ExceptionLoggerFilter : IExceptionFilter
{
private readonly ILogService _logService;
public ExceptionLoggerFilter(ILogService logService) {
_logService = logService;
}
public void OnException(ExceptionContext filterContext) {
_logService.LogError(filterContext.Exception);
}
}
로그 서비스 인스턴스를 가져 오기 위해 종속성 삽입을 사용하고 싶습니다. 그러나, RegisterGlobalFilters 방법은 정적 :
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ExceptionLoggerFilter(???));
}
}
나는 FilterConfig에 대한 정적 생성자를 사용할 수 있지만 이것은 단지 좋은 해결책처럼 생각하지 않습니다.
나는 ExceptionLoggerFilter 클래스에 속성 주입을 사용했지만, 그냥 작동하지 않았다 (LogService는 항상 null입니다) :
[Inject]
public ILogService LogService { get; set; }
나는 공장 패턴을 사용하여 읽어했지만, 그렇지 않은 Factory 클래스를 FilterConfig 클래스의 정적 생성자에 삽입해야하므로 여기서 도움이되는 것 같습니다. 나는 틀릴 수도 있지만 이것은 올바른 해결책 인 것 같지 않습니다.
지금, 나는이 사용하고 단지 - 줄 - 나-AN-인스턴스 방법 :
var logService = (ILogService)DependencyResolver.Current.GetService(typeof(ILogService));
filters.Add(new ExceptionLoggerFilter(logService));
이 작동하지만, 좋은 솔루션입니다? 더 좋은 방법이 있습니까? 의존성 주입에 대한 제 생각과 IOC 컨테이너가 엉망입니다.
'IExceptionFilter'등록 (및 모든 해당 종속성)이 확실하지 않은 경우에는 일반적으로 잘못된 생각입니다. ar e 싱글 톤은 MVC 전역 필터가 전역 적으로 저장되므로 싱글 톤이된다는 의미입니다. – Steven