Inject ViewModels creati dopo aver ottenuto i modelli dal DB

0

Attualmente sto lavorando a un software di gestione delle immagini in cui devo seguire requisiti molto rigidi a causa di interfacce specifiche che non sono autorizzato a modificare. Quindi sono costretto ad avere un List<PictureViewModel> contenente ViewModels creati da PictureModel s, e non uno ViewModel, dove vorrei semplicemente cambiare il riferimento PictureModel che tengo nel ViewModel.

La parte con cui sto combattendo è la conversione di List<PictureModel> in List<PictureViewModel> , mentre si inserisce la dipendenza IBusinessLayer nel costruttore della classe PictureViewModel ( public PictureViewModel(PictureModel model, IBusinessLayer bLayer) ) e cercando di non rompere nessun pattern DI.

Sto usando Ninject come framework di iniezione delle dipendenze.

Ho pensato alle seguenti soluzioni:

1) Creare il seguente bind all'interno della mia configurazione NinjectModule , iniettandolo nel ViewModel contenente List<PictureViewModel> . Questo Func agirà come convertitore tra Model e ViewModel.

Bind<Func<PictureModel, PictureViewModel>>().ToMethod(context => (model =>
{
    var modelArg = new ConstructorArgument("model", model);
    return context.Kernel.Get<PictureViewModel>(modelArg);
}));

2) Simile a 1 : creazione di una classe di conversione che inserirò nel ViewModel contenente List<PictureViewModel> .

public class PictureModelToPictureViewModelConverter
{
    private readonly IBusinessLayer _businessLayer;

    [Inject]
    public PictureModelToPictureViewModelConverter(IBusinessLayer businessLayer)
    {
        _businessLayer = businessLayer;
    }

    public PictureViewModel Convert(PictureModel mdl)
        => new PictureViewModel(mdl, _businessLayer);
}

3) Poiché l'obiettivo è salvare le modifiche (attraverso il livello aziendale) ai metadati delle immagini, potrei provare a risolverlo utilizzando eventi, non una soluzione basata su DI.

Spero di non aver trascurato nessuna soluzione semplice.

    
posta mholle 03.04.2018 - 19:38
fonte

0 risposte

Leggi altre domande sui tag