2014-09-17 8 views
0

ASP.Net MVC4 프로젝트에서 내 사용자 지정 가상 공급자를 사용하고 있습니다. MyVirtualPathProvider 프로 바이더를 호출 해 봅시다. 공급자는 다음과 같이 OnApplicationStarted 메서드에 등록됩니다.Ninject가있는 사용자 지정 VirtualPathProvider

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider()); 

이 메서드는 Global.asax.cs의 일부입니다. 상단에있는 I는 다음과 같습니다

[Inject] 
    public ILogger Logger { get; set; } 

가상 사용자 정의에서 :

public class MvcApplication : NinjectHttpApplication 

을 지금, 나는 그냥이 같은 내 서비스 중 하나를 주입하는 속성을 사용하여 [주입한다]를 싶습니다

 public override VirtualFile GetFile(string virtualPath) 
    { 
    ... 
     Logger.Log(...); 

불행하게도, 로거 따라서 작동하지 않는 null의 : 경로 제공자는 내가 주입 로거를 사용하여 뭔가를 기록하고 싶습니다 GETFILE 방법을 무시했다.

나는 다음과 같이 사용자 정의 가상 경로 제공 생성자의 매개 변수로 로거를 전달하는 시도 :

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider(Kernel.Get<ILogger>())); 

를 불행하게도, 그것은 이동하는 방법이 아니라, 내가 경고를 가지고 있기 때문에 "경고 CS0618 : 'Ninject.Web.Common.NinjectHttpApplication.Kernel'은 사용되지 않습니다. '서비스 탐지기로 Ninject를 사용하지 마십시오.' "

무엇이 잘못 되었습니까? 제발 조언.

답변

0

로깅을 교차 관심사로보고 앰비언트 컨텍스트 디자인 패턴을 사용할 수 있습니다. 일반적으로 사용되는 유형으로 생성자를 오염시키지 않으려는 경우 (DateTime 공급자를 원할 때와 같은 방식으로) 도움이 될 수 있습니다. 이 접근법을 사용했다면 경로 제공 업체에 유형을 주입 할 필요가 없기 때문에 점점 더주의를 기울이십시오.