0

Я использую LightInject с адаптером ServiceProvider на веб-сайте MVC. Я пытаюсь подключить его к MiniProfiler, но мне не повезло. MiniProfiler, кажется, захватывая MVC контроллер Lifecycle, но не какой-либо из зависимостей: Mini Profiler Image Profiling Dump (I was debugging during this screenshot - ignore the 61,744 ms duration)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(); 
     } 
    } 
} 

Это контроллер и тестирование зависимостей:

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); 
    } 
} 

Я бросил точку останова в коде перехватчика. Он никогда не входит в перехватчик для чего-либо для SomeDependency, но он вводит для каждого действия в жизненном цикле MVC для SomeDependencyController

ответ

0

Я понял это. Мне нужно было сделать метод virtual.

Из документации LightInject по:

Любой член, который помечен как виртуальный, может быть перехвачена.

Я пропустил эту часть. Надеюсь, это поможет кому-то в будущем.

 Смежные вопросы

  • Нет связанных вопросов^_^