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.