首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LightInject -拦截而不是拦截依赖项

LightInject -拦截而不是拦截依赖项
EN

Stack Overflow用户
提问于 2016-11-28 15:36:23
回答 1查看 319关注 0票数 0

我在一个MVC网站上使用LightInject和ServiceProvider适配器。我正试图把它连接到MiniProfiler上,但我运气不太好。MiniProfiler似乎正在捕获MVC控制器生命周期,但没有任何依赖项:迷你Profiler图像剖析转储(我在此截图期间调试-忽略61,744毫秒的持续时间)

我就是这样初始化容器的:

代码语言:javascript
复制
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;
}

拦截器看起来如下:

代码语言:javascript
复制
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();
        }
    }
}

这是控制器和测试依赖项:

代码语言:javascript
复制
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生命周期中的每一个操作都输入了拦截器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 16:32:28

我想通了。我需要使方法virtual

来自LightInject的文档:

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

我错过了那部分。希望这能对未来的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40848094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档