Attualmente sto lavorando su un progetto MVC 3 utilizzando Ninject come mio DI, gli oggetti business sono memorizzati in un assembly separato. Mi sto imbattendo in un problema con i parametri del controller, quando postback per le operazioni CRUD sto ricevendo l'errore "Impossibile creare un'istanza di un'interfaccia". Sono consapevole del fatto che non è possibile creare un'istanza di un'interfaccia, ma sembra che l'unico modo per aggirare questo problema è quello di utilizzare un modello di raccoglitore personalizzato e passare a FormCollection. Questo mi sembra davvero disordinato e voglio mantenere il codice del tipo più specifico possibile rispetto al progetto - quindi interfacce ovunque e Ninject per DI i calcoli. Non solo il binding personalizzato del modello sembra disordinato - non perderò anche le mie annotazioni DataAnnuncio?MVC 3 entità passante come interfaccia
Alcuni codice per descrivere quello che ho:
public ActionResult Create()
{
// I'm thinking of using a factory pattern for this part
var objectToCreate = new ConcereteType();
return (objectToEdit);
}
[HttpPost]
public ActionResult Create(IRecord record)
{
// check model and pass to repository
if (ModelState.IsValue)
{
_repository.Create(record);
return View();
}
return View(record);
}
Qualcuno ha eseguito in prima? Come l'hai superato?
Grazie!
Non dovrei quindi infrangere la regola dell'accoppiamento lento? Cosa succede se voglio/devo cambiare il nome del mio metodo concreto per qualche motivo, cioè Record diventa RecordDifferent. Posso avere RecordDifferent che implementa IRecord e cambiare il mio DI per iniettare RecordDifferent in tutti i casi di IRecord. –
Preferisco utilizzare le classi per contenitori modello e ereditarietà piuttosto che interfacce. Di default, DI non viene utilizzato per creare oggetti passati alle azioni. Uso DI solo per la logica reale non per i contenitori di dati – Novakov
Non ho veramente capito cosa intendevi inizialmente, ma avendo progredito un po 'con questo progetto ho realizzato che sto cercando di "disaccoppiare" i contenitori di dati semplici come hai detto tu. Non c'è alcun comportamento (ancora) in nessuno degli oggetti POCO che mappano una tabella di database e quindi non c'è alcun motivo per interfacciarli a questi - né usare una fabbrica per istanziarli. Immagino che quello che ho avuto problemi di comprensione è che il disaccoppiamento dovrebbe essere veramente usato per oggetti con comportamento piuttosto che solo proprietà dei dati. –