diff options
| -rw-r--r-- | MediaBrowser.Common.Implementations/BaseApplicationHost.cs | 38 | ||||
| -rw-r--r-- | MediaBrowser.Common/IApplicationHost.cs | 11 | ||||
| -rw-r--r-- | MediaBrowser.Common/MediaBrowser.Common.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Common/Plugins/IDependencyModule.cs | 7 |
4 files changed, 56 insertions, 1 deletions
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 /// </summary> /// <typeparam name="TApplicationPathsType">The type of the T application paths type.</typeparam> - public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost + public abstract class BaseApplicationHost<TApplicationPathsType> : IApplicationHost, IDependencyContainer where TApplicationPathsType : class, IApplicationPaths { /// <summary> @@ -406,9 +406,30 @@ namespace MediaBrowser.Common.Implementations IsoManager = new IsoManager(); RegisterSingleInstance(IsoManager); + + RegisterModules(); }); } + private void RegisterModules() + { + var moduleTypes = GetExportTypes<IDependencyModule>(); + + 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>(T obj, bool manageLifetime) + { + RegisterSingleInstance(obj, manageLifetime); + } + /// <summary> /// Registers the specified obj. /// </summary> @@ -501,6 +527,11 @@ namespace MediaBrowser.Common.Implementations } } + void IDependencyContainer.RegisterSingleInstance<T>(Func<T> func) + { + RegisterSingleInstance(func); + } + /// <summary> /// Registers the single instance. /// </summary> @@ -512,6 +543,11 @@ namespace MediaBrowser.Common.Implementations Container.RegisterSingle(func); } + void IDependencyContainer.Register(Type typeInterface, Type typeImplementation) + { + Container.Register(typeInterface, typeImplementation); + } + /// <summary> /// Resolves this instance. /// </summary> diff --git a/MediaBrowser.Common/IApplicationHost.cs b/MediaBrowser.Common/IApplicationHost.cs index 3d5f3c96f..fb49cc5b9 100644 --- a/MediaBrowser.Common/IApplicationHost.cs +++ b/MediaBrowser.Common/IApplicationHost.cs @@ -152,4 +152,15 @@ namespace MediaBrowser.Common /// <returns>System.Object.</returns> object CreateInstance(Type type); } + + public interface IDependencyContainer + { + void RegisterSingleInstance<T>(T obj, bool manageLifetime = true) + where T : class; + + void RegisterSingleInstance<T>(Func<T> func) + where T : class; + + void Register(Type typeInterface, Type typeImplementation); + } } diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 63819c5a9..5e0d3aa24 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -79,6 +79,7 @@ <Compile Include="Net\IWebSocketServer.cs" /> <Compile Include="Net\MimeTypes.cs" /> <Compile Include="Net\WebSocketConnectEventArgs.cs" /> + <Compile Include="Plugins\IDependencyModule.cs" /> <Compile Include="Plugins\IPlugin.cs" /> <Compile Include="Progress\ActionableProgress.cs" /> <Compile Include="ScheduledTasks\IScheduledTask.cs" /> diff --git a/MediaBrowser.Common/Plugins/IDependencyModule.cs b/MediaBrowser.Common/Plugins/IDependencyModule.cs new file mode 100644 index 000000000..37ebe0d5b --- /dev/null +++ b/MediaBrowser.Common/Plugins/IDependencyModule.cs @@ -0,0 +1,7 @@ +namespace MediaBrowser.Common.Plugins +{ + public interface IDependencyModule + { + void BindDependencies(IDependencyContainer container); + } +}
\ No newline at end of file |
