Jedem Plug-in einen Verweis auf die Kinect zu geben, ist vielleicht keine gute Idee. Dadurch erzwingen Sie, dass jedes Plug-in Kenntnisse über die Kinect-API (oder Ihren Wrapper davon) hat. Schlimmer noch, jedes Plug-in könnte möglicherweise den Zustand des Kinect-Sensors in etwas ändern, das für das Plug-In funktioniert, aber da keine zwei Plug-Ins etwas voneinander wissen sollten, ändert sich der Zustand eines Gemeinsame Ressource wie ein Kinect-Sensor könnte Schraube jedes andere Plug-in schließen. Ganz zu schweigen davon, dass Sie einen Mechanismus zur Benachrichtigung von Plug-Ins hinzufügen müssen, bei dem sich der Kinect-Sensorstatus geändert hat. Ich hoffe, dass Sie beginnen, die Kopfschmerzen zu sehen, die mit diesem Ansatz verbunden sind.
Anstatt jedem Plug-in einen Verweis auf die Kinect zu geben, würde ich empfehlen, das Gegenteil zu tun. Nennen Sie für jeden Plug-in, der den Kienct-Sensor verwenden möchte, einen zentralen Kinect-Plug-in-Zugriff. Konkreter könnten Sie eine Kinect-Plug-in-Klasse erstellen, die [ImportMany] eine Sammlung von IKinectClient-Klassen enthält. Wann immer ein Videoframe bereit ist oder ein Sprachausdruck erkannt wird oder was sonst noch passiert, kann das Kinect-Plugin einen Delegierten auf jedem IKinectClient-Plug-in auslösen, das an diesem Ereignis interessiert ist (sich registriert hat). Auf diese Weise erhalten Sie einen zentralen Platz für Ihren tatsächlichen Kinect-Code und alle Änderungen, die Sie an der Interaktion Ihrer Anwendung mit dem Kinect-Sensor und/oder Kinect SDK vornehmen müssen, sind in einer einzigen Klasse zusammengefasst. Dies ist die Macht der Umkehrung der Kontrolle!
HINWEIS: Ich habe IKinectClient als Beispiel für die Schnittstelle angegeben, die Ihre kinect-bezogenen Schnittstellen möglicherweise unterstützen. In Wirklichkeit werden Sie wahrscheinlich kein einziges großes Interface für alle Kinect-Interaktionen benötigen. Stattdessen sollten Sie Ihre iTunes-Oberflächen verwerfen. z.B. IKinectSpeechClient, IKinectVideoClient, IKinectGestureClient, ect.
Mit dieser App müssen die Client-Kinect-Plug-Ins weder etwas über Kinect selbst wissen, noch etwas über die Kinect-API wissen (geben Sie das Tempo an, mit dem Kinect für Windows-SDKs veröffentlicht wird) Das ist ein großes Plus).
Ich habe an diesem Problem gearbeitet und darüber gebloggt hier:
http://beachfrontcoding.tumblr.com/post/7339567531/kinectaudiopluginforsoapboxcore
Good Luck
warum Sie Injektion verwenden Konstruktor kann nicht wahr? – BrokenGlass
Ich wusste nicht, was es war. –