2016-10-27 1 views
1

J'ajoute DI à l'application wpf en utilisant le framework Ninject. Est-il approprié de stocker le noyau en tant que membre statique de la classe App, ou je préfère le supprimer de la classe App et créer une instance à tout moment je dois l'utiliser dans le code de windows juste avant d'utiliser (IUnitOfWork unit = new ...) bloc?Est-ce correct Stocker le noyau de dépendance dans l'application onstart comme variable statique?

App.xaml.cs

public partial class App : Application 
{ 
    internal static StandardKernel kernel; 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 
     base.OnStartup(e); 
    } 
} 

Appel du noyau dans des fenêtres différentes:

using (IUnitOfWork unitOfWork = App.kernel.Get<IUnitOfWork>()) 
     { 
      comboFloors.ItemsSource = unitOfWork.Buildings.GetLivingFloors(); 
     } 

Répondre

0

Est-il approprié au noyau de la banque en tant que membre statique de la classe App, ou je préfère supprimer de la classe App et créer une instance à tout moment je dois l'utiliser dans le code de Windows

Vous devez généralement avoir une seule instance de la classe Kernel pendant la durée de vie d'une application. Les instances Kernel peuvent être utilisées en toute sécurité sur des threads et sont optimisées pour être réutilisées. Les créer pour chaque requête ou fenêtre peut entraîner un surcoût important (dans la menory et la performance).

Où stocker cette instance est une histoire différente. Vous souhaitez généralement empêcher les appels directement à partir du code de l'application. Vous voulez seulement l'utiliser dans votre Composition Root. Dans le cas où seule la classe App elle-même peut obtenir le Kernel et en résoudre les services, cela me semble parfaitement bien.