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.