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