8

in asp.net-mvc Ho Windsor Controller Factory che inietta tutte le dipendenze nei controller, ma come si ottiene in Windows Form?come ottenere le dipendenze iniettate nei costruttori in Windows Form

per esempio se questo Form1, come ottengo un'istanza di Form1, dovrei usare resolver (che si chiama ServiceLocator e anti-pattern di alcuni ppl)?

public class Form1 
{ 
    private IBarService _barService; 

    public Form1(IBarService barService) 
    { 
     _barService = barService; 
    } 
} 

risposta

5

Sì, in program.cs è necessario risolvere il problema con windsor Form1. Per poter visualizzare il modulo nel designer, aggiungere un costruttore vuoto e decorarlo con l'attributo Obsolete.

+0

L'approccio 'Obsoleto' non funziona, il progettista mostra ancora interrotto –

6

Utilizzo di Inserimento costruttore per Form (o altre viste in altri framework UI) è spesso problematico poiché il progettista di Visual Studio si aspetta e presuppone un costruttore predefinito.

In ogni caso, una forma o un altro controllo visivo dovrebbe essere una vista stupida senza comportamento. Lo scopo è mostrare tutti i dati che vi si legano. L'utilizzo della funzione di associazione dati spesso aiuta a limitarti a questa forma passiva di visualizzazione.

Ciò significa che è necessario un qualche tipo di controller che può creare un'istanza della vista (modulo) e associare l'origine dati ad esso.

Questo è molto più facile da fare con una tecnologia come WPF, ma è anche possibile con Windows Form. Per l' di ispirazione su come farlo con Windows Forms, ti suggerisco di dare un'occhiata al (ora in pensione) Composite Application Block - è eccessivamente complicato, ma dovrebbe darti qualche idea su come implementare qualcosa di simile.

+0

Per la compatibilità del progettista VS, è possibile fornire un costruttore predefinito privato e fare in modo che il costruttore pubblico chiami quello predefinito. –

+0

@Mark, ho lavorato un po 'con CAB un certo numero di anni fa - non ho sentito che era in pensione. Dove hai trovato che era in pensione? – mreith

+1

@Eren Aygunes: buon punto - non lo sapevo. Tuttavia, in realtà non cambia la mia risposta perché, dal punto di vista del design, le Viste passive si adattano meglio al concetto di Controllo. –

Problemi correlati