我正在使用Ninject和MVC3来注入我的控制器依赖项。有时候,即使在执行控制器操作之前,我也会在MVC Mini Profiler中获得慢速计时。由于我在那段时间之前没有做太多事情,我认为这可能是我使用Ninject的一个问题。是否有现成的方法从ninject获取一些时间信息?也许是一个用于记录依赖项解析花费多长时间的配置选项,或者如果不是自己添加它的好方法,是否有一个我可以扩展或包装的类?
答案 0 :(得分:3)
您可以通过实现IDependencyResolver接口为NinjectDependencyResolver编写装饰器,并将其替换为DependencyResolver。
DependencyResolver.SetResolver(new ProfilingResolver(DependencyResolver.Current));
public class ProfilingResolver : IDependencyResolver
{
private readonly IDependencyResolver decoratedResolver;
public ProfilingResolver(IDependencyResolver decoratedResolver)
{
this.decoratedResolver = decoratedResolver;
}
public object GetService(Type serviceType)
{
using (MiniProfiler.Current.Step("Get_" + serviceType.Name))
{
return this.decoratedResolver.GetService(serviceType);
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
using (MiniProfiler.Current.Step("GetAll_" + serviceType.Name))
{
return this.decoratedResolver.GetServices(serviceType);
}
}
}
答案 1 :(得分:1)
首先,我的默认答案是: -
我从未见过DI在个人资料中显示为有统计意义的任何有趣事物。 Go Compose!
(这篇帖子开头作为评论:@olle你看过源了吗?有一些相对简单的扩展,'包装'解析过程,不应该太复杂,不能理解。鉴于你正在使用迷你探查器,它很容易填充,它似乎是一个相对简单的扩展。我知道这是一个PITA响应进入论坛但我个人感谢被告知去使用源几年前--Ninject代码库及其测试是一种真正的阅读乐趣。)