2011-11-18 7 views
5

Ciao Sto usando ninject con un'app MVC.DI ninject funzionante per controller ma non vista modello

Sono sicuro di averlo configurato correttamente in quanto sono in grado di farlo funzionare per i miei controller. Ecco un esempio per un controller e funziona correttamente:

public class GstRateController : Controller 
    { 
     private readonly IUnitOfWork _unitOfWork; 

     public GstRateController(IUnitOfWork unitOfWork) 
     { 
      _unitOfWork = unitOfWork; 
     } 
... 

poi ho pensato che sarebbe anche bene su un ViewModel così ho provato con:

public class SettingController : Controller 
    { 
     private readonly IUnitOfWork _unitOfWork; 

     public SettingController(IUnitOfWork unitOfWork) 
     { 
      _unitOfWork = unitOfWork; 
     } 

Allora ho un'istanza della vista il modello in un controller da:

public ActionResult Index() 
     { 
      return View("Index", Activator.CreateInstance<SettingViewModel>()); 
     } 

Ma questo mi sta dando l'errore:

No p costruttore arameterless definito per questo oggetto.

Sono nuovo di DI. Qualcuno potrebbe dirmi come ottenerlo per i modellini?

+0

'Activator.CreateInstance ()' è riflessioni, non Ninject. Ninject usa 'kernel.Get ()' per risolvere esplicitamente i componenti. Ma non dovresti generalmente usare il kernel nel mezzo della tua app. Vedi invece la risposta di Darin. –

risposta

4

La ragione per cui funziona per i controller e non per i modelli di visualizzazione è perché quando si installa NInject NuGet, registra un resolver di dipendenze personalizzato e il framework MVC di ASP.NET utilizza il controller factory o il resolver di risoluzione per istanziare i controller. Puoi leggere ulteriori informazioni sui risolutori di dipendenze in this article.

I modelli di vista, d'altro canto, sono classi appositamente progettate per soddisfare i requisiti di una determinata vista. Dal momento che si sta istanziando manualmente, un framework DI non può mai intercettare e iniettare alcuna dipendenza in essi. Non dovrebbero avere dipendenze. Dovrebbero essere semplici oggetti POCO mappati da modelli di dominio. Rappresentano un progetto di uno o più modelli di dominio.

+1

Quindi, come ottenere "modali spessi, controller sottili"? Per quanto ne so qualcosa che riguarda i dati o la manipolazione dei dati dovrebbe essere in un modello. Come dovremmo passare oggetti oggetto manipolatore dati e/o contesto (cioè contesto entità)? – Seregwethrin

Problemi correlati