Как получить на входе WindsorContainer и получить на выходе картинку со всеми сервисами и их зависимостями друг от друга.
1. Идем в Википедию и изучаем две страницы:
DOT Language, Graphviz
Краткое резюме: есть специальный язык для описание графов и программа способная его интерпретировать в нужный нам формат (рисовать картинку, например)
2. Качаем и устанавливаем GraphViz
3. Пишем код:
public class dump_windsor
{
public static void to_dot_file( string filename, IWindsorContainer cont )
{
File.WriteAllText( filename, new digraph("windsor", cont.Kernel.GraphNodes).ToString() );
}
private class digraph
{
private readonly string id;
private readonly List<graph_node> nodes = new List<graph_node>();
public digraph( string id, IEnumerable<GraphNode> nodes )
{
this.id = id;
foreach ( var node in nodes )
foreach ( var dependent in node.Dependents )
this.nodes.Add( new graph_node( node, dependent ) );
}
public override string ToString()
{
return String.Format("digraph {0} {{\n\t{1};\n\t{2}\n\t}}", id, String.Join( ";\n\t", nodes.Select( node => node.ToString() ) ), graph_options() );
}
private static string graph_options()
{
return "graph [ overlap = false ]";
}
}
private class graph_node
{
private readonly string left;
private readonly string right;
public graph_node(GraphNode left, GraphNode right)
{
this.left = gn2string( left );
this.right = gn2string( right );
}
private static string gn2string( GraphNode left )
{
return ( (ComponentModel)left ).Name.Replace( '.', '_' );
}
public override string ToString()
{
return String.Format("{0} -> {1}", left, right );
}
}
}
* This source code was highlighted with Source Code Highlighter.
4. В любом месте где контейнер уже наполнен компонентами вызываем: dump_windsor.to_dot_file("c:\\windsor.dot", container);
5. На получившийся файл натравливаем визуализатор:
"%ProgramFiles%\Graphviz 2.21\bin\dot.exe" -Tpng -owindsor.png windsor.dot
6. Смотрим картинку windsor.png. Ловкость рук, никакого мошеничества.
7. Всю картинку конечно здесь не уместить, вот крохотный кусочек для примера, чтоб не порвать страницу :)
7 комментариев:
Добрый день.
Честно говоря впервые в рунете натыкаюсь на упоминание о WindsorContainer (или как его официально называют разработчики MicroKernel/Windsor).
Скорее всего плохо искал :)
Скажите, насколько давно вы используете этот inversion of control container?
Что вам в нем нравится, что не нравится?
Привет,
>Скажите, насколько давно
лично я - года полтора
>Что вам в нем нравится, что не нравится?
Я бы сказал так: меня в нем все устраивает. Настолько, что на остальные я даже не удосужился посмотреть, ибо пока в этом нет смысла.
Наврал, с октября примерно прошлого года
Добрый вечер, Евгений.
А все таки выложите картинку полностью, интересно посмотреть ее полезность.
Спасибо.
http://www.picamatic.com/view/1571059_metawindsor/
Ну вот, частично как-то так :)
http://habrahabr.ru/blogs/net/63091/
Здорово
Отправить комментарий