[longomatch] Refactor Registry to use generics more



commit 4f31cbd3956d53b40d6abfbb8810c2373ff4a68a
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Apr 2 01:43:00 2015 +0200

    Refactor Registry to use generics more

 LongoMatch.Core/Common/Registry.cs                 |    9 +++--
 LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs      |    2 +-
 .../Interfaces/Multimedia/IMultimediaToolkit.cs    |    2 +-
 LongoMatch.GUI/Gui/GUIToolkit.cs                   |    6 ++--
 LongoMatch.Multimedia/Utils/MultimediaFactory.cs   |   36 +++++++++----------
 LongoMatch/Main.cs                                 |    2 +-
 6 files changed, 29 insertions(+), 28 deletions(-)
---
diff --git a/LongoMatch.Core/Common/Registry.cs b/LongoMatch.Core/Common/Registry.cs
index 9223340..45f24b4 100644
--- a/LongoMatch.Core/Common/Registry.cs
+++ b/LongoMatch.Core/Common/Registry.cs
@@ -44,16 +44,19 @@ namespace LongoMatch.Core.Common
                        elements = new Dictionary<Type, List<RegistryElement>> ();
                }
 
-               public void Register (int priority, Type interfac, Type elementType)
+               public void Register<I, C> (int priority)
                {
+                       Type interfac = typeof(I);
+                       Type klass = typeof(C);
                        if (!elements.ContainsKey (interfac)) {
                                elements [interfac] = new List<RegistryElement> ();
                        }
-                       elements [interfac].Add (new RegistryElement (elementType, priority));
+                       elements [interfac].Add (new RegistryElement (klass, priority));
                }
 
-               public T GetDefault<T> (Type interfac, params object[] args)
+               public T Retrieve<T> (params object[] args)
                {
+                       Type interfac = typeof(T);
                        Type elementType;
 
                        if (!elements.ContainsKey (interfac)) {
diff --git a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
index a3394cd..7e80171 100644
--- a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
@@ -32,7 +32,7 @@ namespace LongoMatch.Core.Interfaces.GUI
        public interface IGUIToolkit
        {
                /* Plugable views */
-               void Register (int priority, Type interfac, Type elementType);
+               void Register <I, C> (int priority);
 
                IPlayerView GetPlayerView ();
 
diff --git a/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs 
b/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
index 60779cd..d7b4093 100644
--- a/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
+++ b/LongoMatch.Core/Interfaces/Multimedia/IMultimediaToolkit.cs
@@ -25,7 +25,7 @@ namespace LongoMatch.Core.Interfaces.Multimedia
 {
        public interface IMultimediaToolkit
        {
-               void Register (int priority, Type interfac, Type elementType);
+               void Register <I, C> (int priority);
 
                IPlayer GetPlayer ();
 
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index a0d9d87..31b8bb4 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -83,14 +83,14 @@ namespace LongoMatch.Gui
                        set;
                }
 
-               public void Register (int priority, Type interfac, Type elementType)
+               public void Register <I, C> (int priority)
                {
-                       registry.Register (priority, interfac, elementType);
+                       registry.Register<I, C> (priority);
                }
 
                public IPlayerView GetPlayerView ()
                {
-                       return registry.GetDefault<IPlayerView> (typeof(IPlayerView));
+                       return registry.Retrieve<IPlayerView> ();
                }
 
                public void InfoMessage (string message, object parent = null)
diff --git a/LongoMatch.Multimedia/Utils/MultimediaFactory.cs 
b/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
index 85974bd..3081f01 100644
--- a/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
+++ b/LongoMatch.Multimedia/Utils/MultimediaFactory.cs
@@ -42,60 +42,58 @@ namespace LongoMatch.Video
                {
                        registry = new Registry ("Multimedia backend");
                        /* Register default elements */
-                       Register (0, typeof(IPlayer), typeof(GstPlayer));
-                       Register (0, typeof(IFramesCapturer), typeof(GstFramesCapturer));
-                       Register (0, typeof(IVideoConverter), typeof(GstVideoConverter));
-                       Register (0, typeof(IVideoEditor), typeof(GstVideoSplitter));
-                       Register (0, typeof(IRemuxer), typeof(GstRemuxer));
-                       Register (0, typeof(ICapturer), typeof(GstCameraCapturer));
-                       Register (0, typeof(IDiscoverer), typeof(GstDiscoverer));
+                       Register<IPlayer, GstPlayer> (0);
+                       Register<IFramesCapturer, GstFramesCapturer> (0);
+                       Register<IVideoConverter, GstVideoConverter> (0);
+                       Register<IVideoEditor, GstVideoSplitter> (0);
+                       Register<IRemuxer, GstRemuxer> (0);
+                       Register<ICapturer, GstCameraCapturer> (0);
+                       Register<IDiscoverer, GstDiscoverer> (0);
                }
 
-               public void Register (int priority, Type interfac, Type elementType)
+               public void Register <I, C> (int priority)
                {
-                       registry.Register (priority, interfac, elementType);
+                       registry.Register<I, C> (priority);
                }
 
                public IPlayer GetPlayer ()
                {
-                       return registry.GetDefault<IPlayer> (typeof(IPlayer));
+                       return registry.Retrieve<IPlayer> ();
                }
 
                public IMultiPlayer GetMultiPlayer ()
                {
-                       return registry.GetDefault<IMultiPlayer> (typeof(IMultiPlayer));
+                       return registry.Retrieve<IMultiPlayer> ();
                }
 
                public IFramesCapturer GetFramesCapturer ()
                {
-                       return registry.GetDefault<IFramesCapturer> (typeof(IFramesCapturer));
+                       return registry.Retrieve<IFramesCapturer> ();
                }
 
                public IVideoEditor GetVideoEditor ()
                {
-                       return registry.GetDefault<IVideoEditor> (typeof(IVideoEditor));
+                       return registry.Retrieve<IVideoEditor> ();
                }
 
                public IVideoConverter GetVideoConverter (string filename)
                {
-                       return registry.GetDefault<IVideoConverter> (typeof(IVideoConverter), filename);
+                       return registry.Retrieve<IVideoConverter> (filename);
                }
 
                public IDiscoverer GetDiscoverer ()
                {
-                       return registry.GetDefault<IDiscoverer> (typeof(IDiscoverer));
+                       return registry.Retrieve<IDiscoverer> ();
                }
 
                public ICapturer GetCapturer ()
                {
-                       return registry.GetDefault<ICapturer> (typeof(ICapturer), "test.avi");
+                       return registry.Retrieve<ICapturer> ("test.avi");
                }
 
                public IRemuxer GetRemuxer (MediaFile inputFile, string outputFile, VideoMuxerType muxer)
                {
-                       return registry.GetDefault<IRemuxer> (typeof(IRemuxer),
-                               inputFile.FilePath,
-                               outputFile, muxer);
+                       return registry.Retrieve<IRemuxer> (inputFile.FilePath, outputFile, muxer);
                }
 
                public MediaFile DiscoverFile (string file, bool takeScreenshot = true)
diff --git a/LongoMatch/Main.cs b/LongoMatch/Main.cs
index 4de4997..bc18cf7 100644
--- a/LongoMatch/Main.cs
+++ b/LongoMatch/Main.cs
@@ -63,7 +63,7 @@ namespace LongoMatch
                                AddinsManager.LoadExportProjectAddins (Config.GUIToolkit.MainController);
                                AddinsManager.LoadMultimediaBackendsAddins (Config.MultimediaToolkit);
                                AddinsManager.LoadUIBackendsAddins (Config.GUIToolkit);
-                               Config.GUIToolkit.Register (0, typeof(IPlayerView), typeof(PlayerView));
+                               Config.GUIToolkit.Register<IPlayerView, PlayerView> (0);
 
                                if (!haveCodecs) {
                                        CodecsChoiceDialog ccd = new CodecsChoiceDialog ();


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]