- PVSM.RU - https://www.pvsm.ru -

Resharper и IoC контейнеры: теперь знакомы! или плагин Agent Mulder

Доброго времени,

Как известно, Resharper [1] решает много проблем по работе с кодом, но все-таки не все.

Одной из такой, не очень решенной, проблемой является навигация по зарегистрированным в IoC контайнерах классам.

Рассмотрим простой пример (используется IoC контейнер Unity [2] от Microsoft).

    IUnityContainer container = new UnityContainer();
    container.RegisterType<IMovieRepository, InMemoryMovieRepository>();
    container.RegisterType<IMovieFinder, MovieFinder>();

В этом примере Resharper «не знает» где используется конструктор MovieFinder и выдает сообщение (по команде Find Usages) «Usages of 'MovieFinder(...)' was not found».

    public class MovieFinder: IMovieFinder
    {
        readonly IMovieRepository repository;

        public MovieFinder(IMovieRepository repository)
        {
            this.repository = repository;
        }
        ...
     }


Resharper и IoC контейнеры: теперь знакомы! или плагин Agent Mulder

Еще хуже обстоит дело, если в регистрации не используется имя класса. В этом случае класс будет показан Resharper-ом как не используемый.

Но, для того чтобы «познакомить» Resharper и IoC контайнеры нашлось решение.
Видимо пользуюясь известной фразой "пусть все будет, но чего то не хватает [3]", разработчики Resharper-а добавили возможность написания плагинов.
Этим то и воспользовался Igal Tabachnik [4].

Плагин Agent Mulder [5] анализирует контейнеры и обеспечивает удобную навигацию между классами и их регистрацией.

Итак, плагин обеспечивает 3 главные возможности:

1. Помечает классы, зарегистрированные в контейнере, специальной иконкой:
image

2. Обеспечивают навигацию от определения класса к месту регистрации.

3. И обратно, навигацию от регистрации до определения классов.
image

Работает все быстро и точно, но, к сожалению, иногда (VS2010 + Reshaper 6.1) навигация работает не так идеально, как хотелось бы. Надеюсь эти недостатки будут быстро устранены, потому что вещь полезная в хозяйстве.

Все что вокруг самого плагина (сайт, документация, инсталляция) сделаны хорошо и работают без проблем.

Сайт плагина: http://hmemcpy.github.com/AgentMulder/ [5] содержит простое, но ясное описание. Имеется видео [6], которое объясняет еще проще.

Плагин уже попал на сайт Resharper [7]-а. Я там насчитал 17 плагинов, из них 4 агента.

Список поддерживаемых контейнеров может быть найден тут https://raw.github.com/hmemcpy/AgentMulder/master/WhatsNew.txt [8].
Кстати, по хорошему надо написать систему плагинов для этого плагина, что бы добавлять свои IoC контейнеры :).

Детальное видео "Дмитрий Нестерук. ReSharper: Архитектура и Расширения [9]" от mezastel [10] может послужить введением в мир плагинов от решарпера.

Игорь.

Автор: constructor


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/net/9706

Ссылки в тексте:

[1] Resharper: http://www.jetbrains.com/resharper/

[2] Unity: http://unity.codeplex.com/

[3] пусть все будет, но чего то не хватает: http://www.youtube.com/watch?v=3zDtR6oM3eQ

[4] Igal Tabachnik: https://github.com/hmemcpy

[5] Плагин Agent Mulder: http://hmemcpy.github.com/AgentMulder/

[6] видео: http://vimeo.com/41113265

[7] сайт Resharper: http://www.jetbrains.com/resharper/plugins/index.jsp#Agent_Mulder

[8] https://raw.github.com/hmemcpy/AgentMulder/master/WhatsNew.txt: https://raw.github.com/hmemcpy/AgentMulder/master/WhatsNew.txt

[9] Дмитрий Нестерук. ReSharper: Архитектура и Расширения: http://vimeo.com/19273009

[10] mezastel: http://habrahabr.ru/users/mezastel/