2011-02-16 10 views
6

Estoy utilizando el kit de herramientas MVVMLight para mi aplicación WPF. Ahora estaba revisando la muestra de demostración de Lauren's MIX 10. El código de muestra está en SL, y hace uso de UnityContainer. La plantilla proporcionada por MVVMLight toolkit para WPF no utiliza el concepto de unidadcontainer. ¿Cómo puedo usar UnityContainer en WPF?Implementación de MVVM Light toolkit WPF Unity

No sé si mi pregunta tiene sentido. No veo ninguna documentación sobre cómo usar ViewModelLocator. Tal vez alguien pueda proporcionar una muestra o una versión WPF de la demostración utilizada por Lauren en MIX

Respuesta

1

Aconsejaría utilizar el Marco de Extensibilidad Administrado. Está en .NET 4 y me cambié de unidad a MEF. Funciono muy bien cuando tu aplicación está creciendo. Puede encontrar mucha información en ella mediante búsqueda usando google. ¡Buena suerte!

+0

Pero estoy trabajando con .NET 3.5 :( – xaria

+0

Eso es realmente un problema ya que MEF solo se envía para .NET 4. Supongo que usas el código fuente de [http://blog.galasoft.ch/archive/2010/ 03/16/sample-code-for-my-mix10-talk-online.aspx] (http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk -online.aspx)? Hay una muy buena muestra. Sugiero que lo eche un vistazo. Si algo no está claro, solo publique otro comentario y lo verificaré. – JLaanstra

+0

Estoy siguiendo esa muestra. Creé un nuevo proyecto usando la plantilla y seguí Demo-2, encontré los problemas. Porque la demo es para SL y estaba haciendo una aplicación WPF y UnityCOntainer no está disponible para WPF. :( – xaria

4

La forma en que uso la Unidad de WPF (MVVM Light) es la siguiente:

puedo crear una clase de programa previo en la raíz de la aplicación, algo así como:

public class Bootstrapper 
{ 
    public IUnityContainer Container { get; set; } 

    public Bootstrapper() 
    { 
     Container = new UnityContainer(); 

     ConfigureContainer(); 
    } 

    private void ConfigureContainer() 
    { 
     Container.RegisterType<IMyRepo, MyRepo>(); 
     Container.RegisterType<MainViewModel>(); 
    } 
} 

Este es mi programa previo. También registro ViewModels porque es fácil crearlos en el Localizador.

A continuación, crear el boostrapper en el constructor de la ViewModelLocator y resolver cada modelo de vista aquí, como:

public class ViewModelLocator 
{ 
    private static Bootstrapper _bootStrapper; 

    static ViewModelLocator() 
    { 
     if (_bootStrapper == null) 
      _bootStrapper = new Bootstrapper(); 
    } 

    public MainViewModel Main 
    { 
      get { return _bootStrapper.Container.Resolve<MainViewModel>(); } 
    } 
} 

Como se ve, mi ViewModelLocator es simple, basta con crear el programa previo y resolver el modelo de vista, y estas máquinas virtuales también resolverán sus dependencias a través del contenedor :)

Quizás haya una mejor forma de archivar esto, pero este es un buen comienzo.

Cuestiones relacionadas