0

J'ai un problème avec la résolution d'un type enregistré dans UnityContainer. Dans mon bootstraper j'ai outrepassé la méthode ConfigureContainer. Maintenant, cette méthode ressemble à ceciUnityContainer ne peut pas résoudre le type

protected override void ConfigureContainer() 
    { 

     base.ConfigureContainer(); 
     RegisterTypeIfMissing(typeof(IView<ShellViewModel>), typeof(Shell), false); 
     RegisterTypeIfMissing(typeof(CommandReaderWriter), typeof(CommandReaderWriter), true); 
    } 

Puis, en fonction CreateShell (également bootstraper) Je veux obtenir l'instance de type CommandReaderWriter donc je l'ai fait

var raeder = Container.TryResolve<CommandReaderWriter>(); 

unfortunatelly retourne cette valeur nulle. J'ai également essayé

var anotherReader = Container.TryResolve(typeof (CommandReaderWriter)); 

mais il n'a pas fait un tour. Cependant, intéressant est le fait que

var isRegistered = Container.IsTypeRegistered(typeof (CommandReaderWriter)); 

renvoie vrai.

alors quelle est la manière appropriee d'enregistrer singletone dans UnityContainer?

+0

Je ne sais pas UnityBootstrapper, mais je parie que RegisterTypeIfMissing s'attend à ce que le premier paramètre soit une interface et non une classe. Pouvez-vous accéder au IUnityContainer et utiliser les méthodes Unity normales pour l'enregistrement? – ErnieL

Répondre

0

Les deux façons j'utiliser pour enregistrer un singleton dans l'unité sont:

_container.RegisterInstance<CommandReaderWriter>(new CommandReaderWriter); 

et

_container.RegisterType<CommandReaderWriter,CommandReaderWriter>(new ContainerControlledLifetimeManager()); 

Ces deux méthodes définies pour être un ContainerControlledLifeTimeManager, qui est l'unité-dire l'Unité LifeTimeManager pour un singleton.

Si vous souhaitez contrôler exactement la manière dont l'objet est construit, utilisez RegisterInstance. La deuxième option est celle que je préfère car Unity s'occupe alors de toute la gestion des dépendances.

Questions connexes