Mantener el uso del contenedor DI en la raíz de la composición en Silverlight y MVVM

No tengo muy claro cómo puedo diseñar, así que mantengo la referencia al contenedor DI en la raíz de composición para una aplicación Silverlight + MVVM.

Tengo el siguiente escenario de uso simple: hay una vista principal (quizás una lista de elementos) y una acción para abrir una vista de edición para un solo elemento. Por lo tanto, la vista principal tiene que crear y mostrar la vista de edición cuando el usuario realiza la acción (por ejemplo, hace clic en algún botón).

Para esto tengo el siguiente código:

public interface IView
{
   IViewModel ViewModel {get; set;}
}

Luego, para cada vista que necesito poder crear, tengo una fábrica abstracta, así

public interface ISomeViewFactory
{
   IView CreateView();
}

Esta fábrica se declara entonces una dependencia del modelo de vista "padre", así:

public class SomeParentViewModel
{
   public SomeParentViewModel(ISomeViewFactory viewFactory)
   {
       // store it
   }

   private void OnSomeUserAction()
   {
      IView view = viewFactory.CreateView();
      dialogService.ShowDialog(view);
   }       
} 

Así que todo está bien hasta aquí, no hay ningún contenedor DI a la vista :). Ahora viene la implementación de ISomeViewFactory:

public class SomeViewFactory : ISomeViewFactory
{
    public IView CreateView()
    {
        IView view = new SomeView();
        view.ViewModel = ????   
    }
}

Los "????" parte es mi problema, porque el modelo de vista para la vista debe resolverse desde el contenedor DI para que se inyecten sus dependencias. Lo que no sé es cómo puedo hacer esto sin tener una dependencia del contenedor DI en ninguna parte, excepto en la raíz de la composición.

Una posible solución sería tener una dependencia del modelo de vista que se inyecta en la fábrica, así:

public class SomeViewFactory : ISomeViewFactory
{
    public SomeViewFactory(ISomeViewModel viewModel)
    { 
       // store it
    }

    public IView CreateView()
    {
        IView view = new SomeView();
        view.ViewModel = viewModel;
    }
}

Si bien esto funciona, tiene el problema de que dado que todo el gráfico del objeto está conectado "estáticamente" (es decir, el modelo de vista "padre" obtendrá una instancia de SomeViewFactory, que obtendrá una instancia de SomeViewModel, y estos vivirán mientras el modelo de vista "principal" vive), la implementación del modelo de vista inyectada tiene estado y si el usuario abre la vista secundaria dos veces, la segunda vez el modelo de vista será la misma instancia y tendrá el estado anterior. Supongo que podría solucionar esto con un método "Inicializar" o algo similar, pero no huele bien.

Otra solución podría ser envolver el contenedor DI y hacer que las fábricas dependan del contenedor, pero aún así sería un contenedor DI "disfrazado" :)

ps: mi solución actual es que las fábricas saben sobre el contenedor DI, y son solo ellos y la raíz de la composición los que tienen esta dependencia.

Respuestas a la pregunta(1)

Su respuesta a la pregunta