2017-07-12 1 views
2

J'ai enregistré une interface comme injection de dépendance de prisme dans mon fichier app.cs.L'objet d'interface d'injection à dépendance de Prism obtient une valeur nulle

protected override void RegisterTypes() 
    { 
     Container.RegisterType<ISqliteCallsService, SqliteCallsService>(new ContainerControlledLifetimeManager()); 
    } 

Alors, quand je crée un objet de cette interface de dépendance, il devient nul dans une classe publique distincte « SampleClass.cs ».

public class SampleClass 
{ 
    ISqliteCallsService _sqliteCallsService; 
    public SampleClass(ISqliteCallsService sqliteCallsService) 
    { 
     _sqliteCallsService = sqliteCallsService; 
     _sqliteCallsService.SyncOfflineFeedbacktoServer(); 
    } 

Ici _sqliteCallsService obtient une valeur nulle.

+0

Comment créer l'instance 'SampleClass'? – Haukinger

+0

Désolé a fait une faute de frappe dans le nom du constructeur, ont édité mon poste –

Répondre

0

Les dépendances sont normalement injectées via des constructeurs ou des propriétés de sorte qu'une classe a une référence à la dépendance. Ils ne sont pas magiquement substitués en tant que paramètres de méthode comme vous avez fait ici.

Vous devez résoudre la classe SampleClass à l'aide du conteneur DI et donner à la classe résolue un moyen d'exposer ses dépendances afin qu'elles puissent être résolues. La solution la plus simple est la suivante:

public class SampleClass 
{ 
    private ISqlLitCallService _sqlService; 

    public SampleClass(ISqliteCallsService sqlService) 
    { 
     _sqlService = sqlService; 
    } 

    public ConnectivitySyncMainLHBackgroundingCode() 
    { 
     _sqliteCallsService.SyncOfflineFeedbacktoServer(); 
    } 
} 

Dans votre classe d'appel:

var s = Container.Resolve<SampleClass>(); 
s.ConnectivitySyncMainLHBackgroundingCode(); 
+0

Désolé j'ai fait une faute de frappe, le nom du constructeur est SampleClass et non ConnectivitySyncMainLHBackgroundingCode –

+0

Et comment instanciez-vous votre SampleClass? Vous devez utiliser Container.Resolve (). –

+0

Je l'instanciais comme ceci à partir d'une classe présente Dans le projet Droid: ISqliteCallsService sqliteCallsService = DependencyService.Get (); var oBackground = new SampleClass (sqliteCallsService); –

0

Peut-on utiliser l'injection de dépendance dans MessagingCenter avec prisme application?

J'ai une longue tâche en cours d'exécution, besoin d'appeler un service à l'aide DI