2009-03-28 8 views
11

Sto avviando una nuova app Winforms e intendo utilizzare un framework IoC/DI (probabilmente Ninject, ma sto anche pensando a StructureMap e LinFu).Strutture IoC/DI con app Winform di Smart Client: come devo affrontare questo?

Sembra che quasi tutti coloro che utilizzano IoC/DI lo stiano facendo in un ambiente basato sul Web e non abbiano trovato praticamente nulla sull'utilizzo di Winforms.

Mi piacerebbe sapere se qualcuno sta utilizzando IoC/DI con Winforms e quali approcci si sono utilizzati per gestire i problemi relativi a Winforms (ad esempio, come si rende disponibile il contenitore in varie parti dell'app, come usa il framework per istanziare i tuoi moduli, ecc.)

Se qualcuno sa di progetti basati su Winforms open source che usano IoC/DI (non importa quale framework, dovrei essere in grado di tradurre concetti) vorrei link a quelli pure.

EDIT:

sono solo persone non scrivere più Smart Client?

EDIT:

Se mi si potrebbe puntare a qualche codice mondo reale che utilizza IOC/DI in un WinForms o addirittura applicazione console tipo (ad esempio, qualcosa che si basa non Web) lo apprezzerei.

EDIT:

Sto usando Ninject e scoperto che Ninject sarà felice di iniettare un'istanza è un'interfaccia comune kernel se si specifica un parametro del costruttore Ikernel. Questo ha funzionato abbastanza bene, ma mi piacerebbe ancora sentire altri approcci che le persone usano.

+0

jikes Ho molto da imparare su .net. Non capisco nemmeno la domanda. – Nifle

+0

In realtà, questi concetti sono stati resi popolari in Java. E di per sé non è collegato a .NET, sto solo utilizzando queste tecniche in .NET –

+0

Hai trovato delle best practice su come rendere accessibile il container attraverso l'applicazione? O è questo l'ultimo EDIT? Significa che posso dare solo le classi che hanno bisogno di un parametro 'IKernel' e Ninject fa il resto (anche quando si trova in un altro sottoprogetto)? – InvisiblePanda

risposta

5

Ho appena iniziato a scrivere una nuova applicazione WinForms da zero utilizzando StructureMap per IoC. Ho già esaminato SCSF e CAB, ma ho trovato quelli troppo complessi.

Ho scritto alcune API fluenti sul registro di StructureMaps in modo che i nostri moduli possano registrare comandi, presentatori e viste.

Dalla mia esperienza è valsa la pena in tutti gli aspetti, non vorrei mai scrivere un'app WinForms senza utilizzare nuovamente questi strumenti e l'approccio modulare altamente strutturato.

+0

Puoi fornire alcuni esempi di dove vedi IoC/DI come una vittoria? Sto solo entrando in questo, quindi non capisco appieno cosa intendi. –

+0

Ok, la nostra app utilizza IoC, MVP, DDD, TDD e interfacce fluenti ovunque. Anche se è già diventata una bestia piuttosto complessa, sono molto fiducioso nella sua qualità. Usando IoC possiamo estrarre ogni singolo pezzo dell'app e testarlo da solo. Abbiamo configurato TeamCity per eseguire test su ogni commit. – grover

+0

Utilizzando IoC siamo stati in grado di reagire facilmente alle richieste dei clienti, cambiando le implementazioni del servizio. Un esempio: abbiamo cambiato repository DDD su richiesta, abbiamo modificato il comportamento dell'interfaccia utente cambiando relatori. Niente piu 'se app in modalità x poi fai altro z' schifo. Anche il cablaggio del comportamento dell'interfaccia utente è stato di aiuto. – grover

1

Ho scritto un'applicazione per visualizzare mappe da dati vettoriali OpenStreetMap (http://wiki.openstreetmap.org/index.php/Kosmos). Ho sviluppato il mio semplice framework MVP che utilizza Windsor Castle come contenitore IoC. Puoi scaricare il codice sorgente se sei interessato, è attualmente con licenza BSD.

In questo momento sto (lentamente) lavorando a una riprogettazione di questo framework per essere in grado di generare moduli dinamicamente (invece di usare il visual designer). Sto giocando con l'idea di introdurre una sorta di interfaccia fluente per la creazione di moduli e controlli, ma non ho ancora trovato una soluzione elegante per questo.

0

Se si desidera solo un contenitore di Inversion of Control e si desidera ottenere un livello inferiore rispetto a Unity, consultare ObjectBuilder dal gruppo Microsoft Patterns and Practices. Unity è un livello di astrazione sopra ObjectBuilder.

Problemi correlati