Профиль ninject в веб-приложении mvc3 - PullRequest
1 голос
/ 03 апреля 2012

Я использую Ninject вместе с MVC3 для ввода зависимостей моего контроллера. Иногда я получаю медленные тайминги в MVC Mini profiler еще до того, как выполняются действия контроллера. Поскольку до того времени я мало что делал, я подумал, что это может быть проблемой с моим использованием Ninject. Есть ли существующий способ получить информацию о времени от ninject? Возможно, параметр конфигурации, чтобы регистрировать, сколько времени заняло разрешение зависимостей, или, если нет, что было бы хорошим способом добавить это самому, есть ли класс, который я могу расширить или перенести?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2012

Вы можете написать декоратор для NinjectDependencyResolver, реализовав интерфейс IDependencyResolver и заменив его в 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 голос
/ 04 апреля 2012

Во-первых, мой ответ по умолчанию был бы: -

Я никогда не видел, чтобы DI отображался как статистически значимый процент всего интересного в профиле. Go Compose !

(Этот пост начал свою жизнь как комментарий: - @olle вы смотрели на источник? Существует несколько относительно простых расширений, которые «оборачивают» процесс разрешения и не должныбыть слишком сложным, чтобы его можно было взломать. Учитывая, что вы используете Mini Profiler, и в него довольно просто вложить вещи, это может показаться довольно простым расширением. Я знаю, что это ответ PITA, чтобы попасть на форум, ноЛично я благодарен за то, что несколько лет назад мне сказали, что нужно использовать The Source - кодовая база Ninject и ее тесты - настоящая радость для чтения.)

...