El mejor enfoque para la extensibilidad de tipos de nodos de contexto y acciones en las formas de árbol

StackOverflow https://stackoverflow.com/questions/931435

Pregunta

Estoy trabajando en un Visual Studio Add-in para Visual Studio 2008 que muestran una vista de árbol que proporciona una vista sobre el contenido en un producto de servidor. El producto de servidor contiene diferentes tipos de nodos, y cada nodo tiene su propio tipo de menú contextual (menú del botón derecho).

Para los nuevos tipos de nodos y las acciones conectados a un nodo que actualmente acaba de agregar el código de dos mi proyecto. Me gustaría desconectar mis tipos de nodos y las acciones disponibles en un nodo en tan pocos que puedo añadir nodos y entradas a al menú contextual con un modelo plugin. MEF probablemente sería un buen candidato. ¿Alguien tiene una buena idea sobre cómo implementar esto de una manera simple y directa, de modo que todo el desarrollador plugin no tiene que hacer un montón de plomería?

¿Fue útil?

Solución

Me gustaría ofrecer una biblioteca común que tanto el código y las bibliotecas de conectores de todos los enlaces a (llaman a esto la dependencia de contrato). En allí, definir una interfaz para un tipo de nodo, como iNodeType. Además, considerar la implementación de un AbstractNodeType ahí que implementa iNodeType y proporciona algunas propiedades útiles que el autor del plugin se puede fijar en su constructor.

Una de las propiedades de iNodeType es una propiedad ContextMenu que devuelve un Windows Forms menú contextual.

En su código crea una propiedad:

[Import("NodeTypes", typeof(INodeType))]
public IEnumerable<INodeType> extensionNodeTypes { get; set; }

Usted puede simplemente enumerar a través de esa vez que haya preparado.

En el código del plugin, se declararían nuevo los tipos de nodos algo como esto (no puede compilar):

[Export("NodeTypes", typeof(INodeType))]
public class SomeNodeType : AbstractNodeType
{
    public SomeNodeType()
    {
        this.ContextMenu = base.BuildContextMenu(/* ... */);
        /* etc. */
    }
    /* ... other custom logic ... */
}

Espero que no lo hice desordenar la sintaxis, pero esa es la idea general.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top