C#.NET Rx-Où est le système.Réactif?

J'ai un arrière-plan Java intensif, alors pardonnez-moi si je néglige quelque chose d'évident en C#, mais mes recherches ne me mènent nulle part. J'essaie d'utiliser la bibliothèque RX. net réactive. Le compilateur ne se plaint pas du IObservable mais c'est avec l'appel à la méthode zip. Il est en train de lancer le "... il vous manque une directive d'utilisation ou une référence d'assemblage?"

J'ai parcouru les espaces de noms et je ne peux pas trouver ce qui est à la recherche. Je ne trouve pas le System.Reactive qui jette aussi une erreur si elle est utilisée, et toutes les références sont déjà incluses pour cette application Windows 8.1. Quelqu'un peut-il me donner un indice sur ce qui est mal?

public sealed class EventEngine
{    
    private static readonly EventEngine singleton = new EventEngine();

    public static EventEngine get()
    {
        return singleton;
    }

    public IObservable<MusicNote> CurrentKey { get; set; }
    public IObservable<Scale> CurrentScale { get; set; }

    public IObservable<AppliedScale> CurrentAppliedScale
    {
        get
        {
            return CurrentScale.zip(CurrentKey,
                (s, k) => AppliedScale.getAppliedScale(k, s));
        } 
    }

    private EventEngine() {}
}

*mise à JOUR *

Voici la version de travail après avoir examiné les entrées des réponses.

public sealed class EventEngine
{
    private static readonly EventEngine singleton = new EventEngine();

    public static EventEngine get()
    {
        return singleton;
    }

    public IObservable<MusicNote> CurrentKey { get; set; }
    public IObservable<Scale> CurrentScale { get; set; }

    public IObservable<AppliedScale> CurrentAppliedScale
    {
        get
        {
            return Observable.Zip(CurrentScale, CurrentKey,
                (s, k) => AppliedScale.getAppliedScale(s,k));
        } 
    }

    private EventEngine() {}
}
26
demandé sur Massimiliano Kraus 0000-00-00 00:00:00

1 réponses

Vous n'avez probablement pas ajouté les références d'assemblage nécessaires pour Rx à votre projet . (Référencer un assembly est Pas la même chose que d'importer un espace de noms! Vous savez déjà ce qu'est un espace de noms; un assembly est quelque chose de similaire à un JAR; la plus petite unité de déploiement/distribution de code. Votre projet doit le référencer avant que les espaces de noms définis à l'intérieur ne soient disponibles.)

Le compilateur probablement ne se plaignent pas IObservable<T> et IObserver<T> parce que votre projet cible. NET Framework version 4 ou ultérieure. Ces deux interfaces font partie du Core. NET Framework Class Library (FCL) depuis. net version 4. (Si vous ciblez une version. net antérieure, vous obtiendrez également des erreurs pour l'utilisation de ces interfaces non définies.)

Chaque partie de Rx autre que ces deux interfaces est Pas inclus dans le noyau. net FCL, mais réside dans leurs propres assemblys (add-on). Vous pouvez les ajouter à votre projet par exemple en installant le paquets NuGet correspondants :

  1. Dans Visual Studio, aller à OutilsGestionnaire de Package NuGetla Console du Gestionnaire de Package.

  2. Dans la fenêtre de la console NuGet, sélectionnez le projet cible (où vous souhaitez utiliser Rx) dans la liste déroulante projet par Défaut.

  3. Ensuite, tapez Install-Package System.Reactive et a frappé Entrée ↵. (Note: Ce paquet s'appelait auparavant Rx-Main; voir cette réponse pour détail.)

  4. Cela ajoutera les références d'assemblage System.Reactive.* à votre projet.

37
répondu stakx 2017-05-30 07:54:37