2016-11-28 11 views
0

MVC 웹 사이트에서 ServiceProvider 어댑터와 함께 LightInject를 사용하고 있습니다. MiniProfiler에 연결하려고하는데,별로 운이 없어요. MiniProfiler는 MVC 컨트롤러 라이프 사이클을 캡처하는 것 같다,하지만 종속성 중 하나LightInject - 인터셉트 의존성을 가로 지르지 않음

protected override IServiceProvider BuildServiceProvider(IServiceCollection serviceCollection) 
{ 
    var container = new ServiceContainer(); 
    container.Register<IInterceptor, MiniProfilerInterceptor>(); 
    foreach (var descriptor in serviceCollection) 
    { 
     if (descriptor.ServiceType.AssemblyQualifiedName.StartsWith("ProjectName")) 
     { 
      container.Intercept(s => s.ServiceType == descriptor.ServiceType, i => i.GetInstance<IInterceptor>()); 
     } 
    } 
    var serviceProvider = container.CreateServiceProvider(serviceCollection); 
    return serviceProvider; 
} 

인터셉터는 다음과 같습니다 :

public class MiniProfilerInterceptor : IInterceptor 
{ 
    public object Invoke(IInvocationInfo invocation) 
    { 
     var profiler = MiniProfiler.Current; 
     var returnType = invocation.Method.ReturnType; 
     using (profiler.Step(invocation.Proxy.GetType().Name + ":" + invocation.Method.Name)) 
     { 
      return invocation.Proceed(); 
     } 
    } 
} 
Mini Profiler Image Profiling Dump (I was debugging during this screenshot - ignore the 61,744 ms duration)

이 내가 컨테이너를 초기화하고있어 어떻게

public class SomeDependencyController : Controller 
{ 
    private readonly SomeDependency _dependency; 

    public SomeDependencyController(SomeDependency dependency) 
    { 
     _dependency = dependency; 
    } 
    public MvcHtmlString DoSomething() 
    { 
     _dependency.DoSomething(); 
     return new MvcHtmlString("Did it"); 
    } 
    public ActionResult DoRender() 
    { 
     _dependency.DoSomething(); 
     return View("DoRender"); 
    } 
} 

public class SomeDependency 
{ 
    public void DoSomething() 
    { 
     Thread.Sleep(1000); 
    } 
} 
,174 : 는

이 제어기 및 테스트 의존성이며

인터셉터 코드에 중단 점을 던졌습니다. 인터셉터에 SomeDependency에 대한 어떠한 것도 입력하지 않지만 MVC 라이프 사이클의 모든 작업에 대해 SomeDependencyController

답변

0

을 입력합니다. 나는 방법을 만들 필요가 있었다 virtual. LightInject의 문서에서

:

가상을 가로 챌 수 있습니다로 표시됩니다 모든 회원.

나는 그 부분을 놓쳤다. 바라기를 이것은 미래에 누군가를 돕기를 바랍니다.