J'essaie d'implémenter Unity dans une application WPVM MVF, mais il me manque une vue d'ensemble.Caliburn.Micro + Unity 2.1 + MVVM: exemple de code
En ce moment j'ai créé un programme d'amorçage comme ceci:
public class MainBootstrapper : Bootstrapper<MainViewModel>
{
private UnityContainer container;
protected override void Configure()
{
container = new UnityContainer();
container.RegisterType<IServiceLocator, UnityServiceLocator>(new ContainerControlledLifetimeManager());
container.RegisterType<IWindowManager, WindowManager>(new ContainerControlledLifetimeManager());
container.RegisterType<IEventAggregator, EventAggregator>(new ContainerControlledLifetimeManager());
}
protected override object GetInstance(Type service, string key)
{
if (service != null)
{
return container.Resolve(service);
}
if (!string.IsNullOrWhiteSpace(key))
{
return container.Resolve(Type.GetType(key));
}
return null;
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return container.ResolveAll(service);
}
protected override void BuildUp(object instance)
{
container.BuildUp(instance);
}
}
Comment ce qui est la meilleure façon d'utiliser? Ce code fonctionne actuellement:
public class MainViewModel : PropertyChangedBase
{
public MainViewModel()
{ }
[Dependency]
public Sub1ViewModel Sub1VM { get; set; }
[Dependency]
public Sub2ViewModel Sub2VM { get; set; }
}
le MainView a ceci:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Name="Sub1VM" />
<ContentControl Grid.Row="1" Name="Sub2VM" />
</Grid>
tout d'abord: le code que je partage, est-ce la bonne façon d'utiliser l'unité + Caliburn? Maintenant, disons que mon Sub1VM utilise un modèle 'M1', mais Sub2VM doit utiliser le même modèle pour afficher des informations mais pas en faisant une autre instance du modèle M1. (singleton)
Comment cela fonctionne-t-il maintenant? Montrer que j'utilise un IServiceLocator dans chaque constructeur viewmodel? Quelqu'un pourrait-il partager un échantillon de code pour l'expliquer?
merci pour le lien 'start here' – juFo
@juFo, je vous en prie. –