2009-03-28 5 views
11

Estoy comenzando una nueva aplicación Winforms, y tengo la intención de utilizar un framework IoC/DI (probablemente Ninject, pero también estoy pensando en StructureMap y LinFu).Marcos IoC/DI con aplicaciones Smart Client Winform: ¿Cómo debo abordar esto?

Parece que casi todos los que usan IoC/DI lo hacen en un entorno basado en web y no han encontrado prácticamente nada en el uso de Winforms con él.

Me gustaría saber si alguien está usando IoC/DI con Winforms y qué enfoques utiliza para tratar con problemas relacionados con Winforms (por ejemplo, ¿cómo hace que el contenedor esté disponible en varias partes de la aplicación? utilice el marco para crear instancias de sus formularios, etc.)

Si alguien sabe de cualquier fuente abierta, los proyectos basados ​​en Winforms que usan IoC/DI (no importa qué marco, debería ser capaz de traducir conceptos) me gustaría enlaces a esos también.

EDIT:

son personas no escribir Smart Clients más?

EDIT:

Si me podría apuntar a un cierto código del mundo real que utiliza IOC/DI en un Winforms o incluso aplicación de consola de tipo (es decir, algo que no se basa web) se lo agradecería.

EDIT:

He estado usando Ninject y descubrí que Ninject estará feliz de inyectar una instancia de su interfaz al núcleo común si se especifica un parámetro de constructor iKernel. Esto ha estado funcionando bastante bien, pero aún me gustaría escuchar otros enfoques que usa la gente.

+0

jikes Tengo mucho que aprender sobre .net. Ni siquiera entiendo la pregunta. – Nifle

+0

En realidad, estos conceptos se popularizaron en Java. Y no está relacionado con .NET per se, solo estoy usando estas técnicas en .NET –

+0

¿Encontró alguna de las mejores prácticas sobre cómo hacer que el contenedor sea accesible a través de la aplicación? ¿O de eso se trata el último EDIT? ¿Significa que puedo simplemente dar clases que necesitan un parámetro 'IKernel' y Ninject hace el resto (incluso cuando está en otro subproyecto)? – InvisiblePanda

Respuesta

5

Recientemente comencé a escribir una nueva aplicación WinForms desde cero utilizando StructureMap para IoC. Anteriormente miré SCSF y CAB, pero encontré aquellos demasiado complejos.

Escribí algunas API fluidas sobre el registro de StructureMaps para que nuestros módulos puedan registrar comandos, presentadores y vistas.

Desde mi experiencia ha valido la pena el esfuerzo en todos los aspectos, nunca me gustaría escribir una aplicación WinForms sin usar estas herramientas y el enfoque modular altamente estructurado de nuevo.

+0

¿Puede darnos algunos ejemplos de dónde ve IoC/DI como una victoria? Me estoy metiendo en esto, así que no entiendo completamente a qué te refieres. –

+0

Ok, nuestra aplicación está usando IoC, MVP, DDD, TDD e interfaces fluidas en todas partes. Aunque ya se ha convertido en una bestia bastante compleja, tengo mucha confianza en su calidad. Usando IoC podemos sacar cada pieza de la aplicación y probarla en forma aislada. Configuramos TeamCity para ejecutar pruebas en cada compromiso. – grover

+0

Al usar IoC, pudimos reaccionar fácilmente a las demandas de los clientes al cambiar las implementaciones del servicio. Un ejemplo: cambiamos repositorios DDD a petición, cambiamos el comportamiento de UI cambiando de presentadores. No más 'si la aplicación en el modo x luego haga la mierda de y else z'. Incluso el cableado de diferentes comportamientos UI ayudó también. – grover

1

He escrito una aplicación para mostrar mapas a partir de datos vectoriales de OpenStreetMap (http://wiki.openstreetmap.org/index.php/Kosmos). Desarrollé mi propio marco de MVP simple que usa el Castillo de Windsor como un contenedor IoC. Puede descargar el código fuente si le interesa, actualmente tiene licencia de BSD.

Ahora estoy (lentamente) trabajando en un rediseño de este marco para poder generar formularios dinámicamente (en lugar de utilizar el diseñador visual). Estoy jugando con la idea de introducir algún tipo de interfaz fluida para construir formularios y controles, pero aún no he encontrado una solución elegante para esto.

0

Si solo desea un contenedor de inversión de control y desea obtener un nivel un poco más bajo que Unity, consulte ObjectBuilder del grupo de patrones y prácticas de Microsoft. Unity es una capa de abstracción encima de ObjectBuilder.

Cuestiones relacionadas