光线 - 拦截不拦截依赖性



我正在使用MVC网站上的ServiceProvider适配器使用LightInject。我正在尝试将其连接到微型流封器,但我没有太多运气。微型流封器似乎正在捕获MVC控制器生命周期,但没有任何依赖性:迷你剖面图像分析转储(我在此屏幕截图期间进行调试 - 忽略61,744毫秒的持续时间)

这是我初始化容器的方式:

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的任何东西,但它可以为SomeDependencyController

中的MVC生命周期中的每一个动作输入。

我弄清楚了。我需要做方法virtual

摘自LightInject的文档:

任何标记为虚拟的成员都可以截获。

我错过了那部分。希望将来对某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新