From 61c2364de1a90b59cc2696858e946b88efab5c7d Mon Sep 17 00:00:00 2001 From: Thomas Gillen Date: Thu, 6 Feb 2014 21:18:40 +0000 Subject: Added IDependencyModule to allow plugins to define IoC bindings --- .../BaseApplicationHost.cs | 38 +++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'MediaBrowser.Common.Implementations/BaseApplicationHost.cs') diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index e2ef4864d..f63108048 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -35,7 +35,7 @@ namespace MediaBrowser.Common.Implementations /// Class BaseApplicationHost /// /// The type of the T application paths type. - public abstract class BaseApplicationHost : IApplicationHost + public abstract class BaseApplicationHost : IApplicationHost, IDependencyContainer where TApplicationPathsType : class, IApplicationPaths { /// @@ -406,9 +406,30 @@ namespace MediaBrowser.Common.Implementations IsoManager = new IsoManager(); RegisterSingleInstance(IsoManager); + + RegisterModules(); }); } + private void RegisterModules() + { + var moduleTypes = GetExportTypes(); + + foreach (var type in moduleTypes) + { + try + { + var instance = Activator.CreateInstance(type) as IDependencyModule; + if (instance != null) + instance.BindDependencies(this); + } + catch (Exception ex) + { + Logger.ErrorException("Error setting up dependency bindings for " + type.Name, ex); + } + } + } + protected virtual IFileSystem CreateFileSystemManager() { return new CommonFileSystem(Logger, true); @@ -479,6 +500,11 @@ namespace MediaBrowser.Common.Implementations } } + void IDependencyContainer.RegisterSingleInstance(T obj, bool manageLifetime) + { + RegisterSingleInstance(obj, manageLifetime); + } + /// /// Registers the specified obj. /// @@ -501,6 +527,11 @@ namespace MediaBrowser.Common.Implementations } } + void IDependencyContainer.RegisterSingleInstance(Func func) + { + RegisterSingleInstance(func); + } + /// /// Registers the single instance. /// @@ -512,6 +543,11 @@ namespace MediaBrowser.Common.Implementations Container.RegisterSingle(func); } + void IDependencyContainer.Register(Type typeInterface, Type typeImplementation) + { + Container.Register(typeInterface, typeImplementation); + } + /// /// Resolves this instance. /// -- cgit v1.2.3