Sto imparando Caliburn Micro e provo a utilizzare lo EventAggregator
dal official site.Caliburn Micro Constructor Injection Failed
Tuttavia, ho ottenuto un'eccezione
"No costruttore senza parametri definiti per questo oggetto."
Il messaggio è chiaro ma l'esempio non include neanche un costruttore senza parametri. Se aggiungo uno, il costruttore con parametro non viene colpito e il IEventAggregator
non viene ancora iniettato correttamente.
Ecco il mio editore VM dopo aver aggiunto il costruttore senza parametri (senza di essa, verrà generata un'eccezione):
public MainViewModel() { }
public MainViewModel(IEventAggregator ea) : this()
{
eventAggregator = ea;
}
Ed ecco il programma di avvio automatico che sto usando:
public class AppBootstrapper : Bootstrapper<MainViewModel>
{
private readonly SimpleContainer container = new SimpleContainer();
protected override void Configure()
{
container.Singleton<IEventAggregator, EventAggregator>();
}
}
Ecco il esempio dalla CM:
// Creating the EventAggregator as a singleton.
public class Bootstrapper : BootstrapperBase {
private readonly SimpleContainer _container =
new SimpleContainer();
// ... Other Bootstrapper Config
protected override void Configure(){
_container.Singleton<IEventAggregator, EventAggregator>();
}
// ... Other Bootstrapper Config
}
// Acquiring the EventAggregator in a viewModel.
public class FooViewModel {
private readonly IEventAggregator _eventAggregator;
public FooViewModel(IEventAggregator eventAggregator) {
_eventAggregator = eventAggregator;
}
}
ho controllato questo post (Inject EventAggregator into ViewModel with Caliburn Micro), ma semplicemente non ha detto nulla perché il CM non invoca il costruttore con l'iniezione.
Ho anche controllato la soluzione di esempio del CM ma utilizza MEF come soluzione DI.
Cosa mi manca?
E 'stato un po' che non ho guardato Caliburn, ma sei sicuro che il vostro programma di avvio automatico è effettivamente iniziato, può ottenere le istanze, ecc? Dai un'occhiata a questo http://caliburnmicro.codeplex.com/SourceControl/latest#samples/Caliburn.Micro.HelloSimpleContainer/Caliburn.Micro.HelloSimpleContainer/Bootstrapper.cs esempio di contenitore semplice, non usa MEF o altro –
@MaksimS. Configure() viene eseguito; Ho provato ad aggiungere Start() al costruttore bootstrapper ma non ho avuto fortuna. Inoltre, l'esempio non inserisce nulla nella VM. – ender
Non hai nulla per testare il tuo codice al momento; tuttavia, è sufficiente dare un'occhiata al codice EventAggregator nell'ultima build e esso contiene _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Per caso, usi EventAggregator da Prism o qualcos'altro invece di Caliburn? So che sembra sciocco, ma ancora :) –