Доброго времени,
Как известно, Resharper решает много проблем по работе с кодом, но все-таки не все.
Одной из такой, не очень решенной, проблемой является навигация по зарегистрированным в IoC контайнерах классам.
Рассмотрим простой пример (используется IoC контейнер Unity от 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-ом как не используемый.
Но, для того чтобы «познакомить» Resharper и IoC контайнеры нашлось решение.
Видимо пользуюясь известной фразой "пусть все будет, но чего то не хватает", разработчики Resharper-а добавили возможность написания плагинов.
Этим то и воспользовался Igal Tabachnik.
Плагин Agent Mulder анализирует контейнеры и обеспечивает удобную навигацию между классами и их регистрацией.
Итак, плагин обеспечивает 3 главные возможности:
1. Помечает классы, зарегистрированные в контейнере, специальной иконкой:
2. Обеспечивают навигацию от определения класса к месту регистрации.
3. И обратно, навигацию от регистрации до определения классов.
Работает все быстро и точно, но, к сожалению, иногда (VS2010 + Reshaper 6.1) навигация работает не так идеально, как хотелось бы. Надеюсь эти недостатки будут быстро устранены, потому что вещь полезная в хозяйстве.
Все что вокруг самого плагина (сайт, документация, инсталляция) сделаны хорошо и работают без проблем.
Сайт плагина: http://hmemcpy.github.com/AgentMulder/ содержит простое, но ясное описание. Имеется видео, которое объясняет еще проще.
Плагин уже попал на сайт Resharper-а. Я там насчитал 17 плагинов, из них 4 агента.
Список поддерживаемых контейнеров может быть найден тут https://raw.github.com/hmemcpy/AgentMulder/master/WhatsNew.txt.
Кстати, по хорошему надо написать систему плагинов для этого плагина, что бы добавлять свои IoC контейнеры :).
Детальное видео "Дмитрий Нестерук. ReSharper: Архитектура и Расширения" от mezastel может послужить введением в мир плагинов от решарпера.
Игорь.
Автор: constructor