Estoy trabajando en una aplicación WPF de tamaño medio (MVVM) que debería ser extensible y fácil de mantener en el futuro. Por lo tanto, decidí usar un contenedor IoC (Unity en este caso) para mantener las cosas flexibles.¿Dónde colocar y configurar el contenedor IoC en una aplicación WPF?
Sin embargo, no estoy seguro de dónde colocar y configurar Unity en una aplicación WPF.
Supongo que el contenedor debe ser accesible globalmente, por lo que probablemente debería ir a la clase de Aplicación. ¿Pero debería hacerlo como propiedad estática? ¿Debo configurarlo en el controlador de eventos Application_Startup()?
Ej:
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static UnityContainer MyUnityContainer;
private void Application_Startup(object sender, StartupEventArgs e)
{
// instantiate and configure Unity
}
}
De esta manera voy a ser capaz de acceder contenedor desde cualquier lugar de la aplicación a través de la propiedad estática:
App.MyUnityContainer
supongo que esto es una manera de hacerlo, pero lo No estoy seguro de si hay mejores prácticas para este problema, específicamente para las aplicaciones de WPF.
¿Cómo puedo olvidar por completo su existencia? Querrá resolver las dependencias en el nivel superior de su gráfico de dependencia, ¿no? Quiero decir, por ejemplo, se supone que un controlador de evento de clic de botón debe guardar 'Cliente' en la base de datos, que usa' CustomerRepository'. ¿No tendrá que resolver 'CustomerRepository' para usarlo, por lo tanto, necesitará el contenedor IoC nuevamente? –
@JoaoMilasch ¿Nivel superior? Absolutamente. ¿Pero por qué el nivel superior sería una ventana y no la clase de la aplicación? En su caso, tiene una Ventana que requiere un repositorio, que se puede inyectar a través de la Inyección de Constructor. A continuación, puede resolver MainWindow en el evento de inicio de su aplicación llamando al contenedor. –
Aha!Usted respondió mi pregunta indirectamente y todo tiene sentido ahora. Estaba pensando que necesitaba configurar el contenedor en la clase de la aplicación, pero Windows necesitaría acceso directo al contenedor configurado. En cambio, si hago lo que sugiere, el objeto contenedor solo deberá existir en la clase de la aplicación. ¡Corrígeme si me equivoco, por favor! :) ¡Gracias! –