diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-22 22:49:00 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-02-22 22:49:00 -0500 |
| commit | c165f37bb96ad40d863a436795c21b9085f3fde9 (patch) | |
| tree | 47d22d429855776dc70609992ee27dfabc612bfe | |
| parent | 57cb08085d61682719c6c2804c37aa6aae6fd470 (diff) | |
more dependancy injection. still just beginning
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 52 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/IApplicationHost.cs | 21 | ||||
| -rw-r--r-- | MediaBrowser.Common/MediaBrowser.Common.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Common/packages.config | 1 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 75 | ||||
| -rw-r--r-- | MediaBrowser.Controller/MediaBrowser.Controller.csproj | 4 | ||||
| -rw-r--r-- | MediaBrowser.Controller/MediaInfo/FFMpegManager.cs | 90 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs | 19 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs | 15 | ||||
| -rw-r--r-- | MediaBrowser.Controller/packages.config | 1 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/App.xaml.cs | 67 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj | 4 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/packages.config | 1 |
13 files changed, 147 insertions, 206 deletions
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 202bd3cab..85954cb82 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -18,7 +18,6 @@ using System.Linq; using System.Reflection; using System.Threading; using System.Threading.Tasks; -using SimpleInjector; namespace MediaBrowser.Common.Kernel { @@ -224,12 +223,6 @@ namespace MediaBrowser.Common.Kernel public TaskManager TaskManager { get; private set; } /// <summary> - /// Gets the iso manager. - /// </summary> - /// <value>The iso manager.</value> - public IIsoManager IsoManager { get; private set; } - - /// <summary> /// Gets the rest services. /// </summary> /// <value>The rest services.</value> @@ -347,20 +340,14 @@ namespace MediaBrowser.Common.Kernel /// Initializes a new instance of the <see cref="BaseKernel{TApplicationPathsType}" /> class. /// </summary> /// <param name="appHost">The app host.</param> - /// <param name="isoManager">The iso manager.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">isoManager</exception> - protected BaseKernel(IApplicationHost appHost, IIsoManager isoManager, ILogger logger) + protected BaseKernel(IApplicationHost appHost, ILogger logger) { if (appHost == null) { throw new ArgumentNullException("appHost"); } - - if (isoManager == null) - { - throw new ArgumentNullException("isoManager"); - } if (logger == null) { @@ -368,7 +355,6 @@ namespace MediaBrowser.Common.Kernel } ApplicationHost = appHost; - IsoManager = isoManager; Logger = logger; } @@ -472,11 +458,6 @@ namespace MediaBrowser.Common.Kernel } /// <summary> - /// The ioc container - /// </summary> - private readonly Container _iocContainer = new Container(); - - /// <summary> /// Composes the parts. /// </summary> /// <param name="allTypes">All types.</param> @@ -486,19 +467,18 @@ namespace MediaBrowser.Common.Kernel CompositionContainer = GetSafeCompositionContainer(concreteTypes.Select(i => new TypeCatalog(i))); - ComposeExportedValues(CompositionContainer, _iocContainer); + RegisterExportedValues(CompositionContainer); CompositionContainer.ComposeParts(this); - ComposePartsWithIocContainer(concreteTypes, _iocContainer); + FindParts(concreteTypes); } /// <summary> /// Composes the parts with ioc container. /// </summary> /// <param name="allTypes">All types.</param> - /// <param name="container">The container.</param> - protected virtual void ComposePartsWithIocContainer(Type[] allTypes, Container container) + protected virtual void FindParts(Type[] allTypes) { RestServices = GetExports<IRestfulService>(allTypes); WebSocketListeners = GetExports<IWebSocketListener>(allTypes); @@ -530,21 +510,20 @@ namespace MediaBrowser.Common.Kernel /// <returns>System.Object.</returns> private object Instantiate(Type type) { - return _iocContainer.GetInstance(type); + return ApplicationHost.CreateInstance(type); } /// <summary> /// Composes the exported values. /// </summary> /// <param name="container">The container.</param> - /// <param name="iocContainer"></param> - protected virtual void ComposeExportedValues(CompositionContainer container, Container iocContainer) + protected virtual void RegisterExportedValues(CompositionContainer container) { + ApplicationHost.Register<IKernel>(this); + container.ComposeExportedValue("logger", Logger); container.ComposeExportedValue("appHost", ApplicationHost); - - iocContainer.RegisterSingle(Logger); - iocContainer.RegisterSingle(ApplicationHost); + container.ComposeExportedValue("isoManager", ApplicationHost.Resolve<IIsoManager>()); } /// <summary> @@ -739,7 +718,6 @@ namespace MediaBrowser.Common.Kernel { DisposeTcpManager(); DisposeTaskManager(); - DisposeIsoManager(); DisposeHttpManager(); DisposeComposableParts(); @@ -754,18 +732,6 @@ namespace MediaBrowser.Common.Kernel } /// <summary> - /// Disposes the iso manager. - /// </summary> - private void DisposeIsoManager() - { - if (IsoManager != null) - { - IsoManager.Dispose(); - IsoManager = null; - } - } - - /// <summary> /// Disposes the TCP manager. /// </summary> private void DisposeTcpManager() diff --git a/MediaBrowser.Common/Kernel/IApplicationHost.cs b/MediaBrowser.Common/Kernel/IApplicationHost.cs index 63c63eb3d..d2b1ab7a2 100644 --- a/MediaBrowser.Common/Kernel/IApplicationHost.cs +++ b/MediaBrowser.Common/Kernel/IApplicationHost.cs @@ -43,5 +43,26 @@ namespace MediaBrowser.Common.Kernel /// </summary> /// <returns>Task.</returns> Task UpdateApplication(CancellationToken cancellationToken, IProgress<double> progress); + + /// <summary> + /// Creates an instance of type and resolves all constructor dependancies + /// </summary> + /// <param name="type">The type.</param> + /// <returns>System.Object.</returns> + object CreateInstance(Type type); + + /// <summary> + /// Registers a service that other classes can use as a dependancy. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="obj">The obj.</param> + void Register<T>(T obj) where T : class; + + /// <summary> + /// Resolves this instance. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns>``0.</returns> + T Resolve<T>() where T : class; } } diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index ea388e33b..cae26b3df 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -88,9 +88,6 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\ServiceStack.Text.3.9.37\lib\net35\ServiceStack.Text.dll</HintPath> </Reference> - <Reference Include="SimpleInjector"> - <HintPath>..\packages\SimpleInjector.2.0.0-beta5\lib\net40-client\SimpleInjector.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Configuration" /> diff --git a/MediaBrowser.Common/packages.config b/MediaBrowser.Common/packages.config index 96fdb618b..536640094 100644 --- a/MediaBrowser.Common/packages.config +++ b/MediaBrowser.Common/packages.config @@ -13,5 +13,4 @@ <package id="ServiceStack.OrmLite.SqlServer" version="3.9.37" targetFramework="net45" /> <package id="ServiceStack.Redis" version="3.9.37" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.9.37" targetFramework="net45" /> - <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 6bd48a502..ebf3e724d 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -28,7 +28,6 @@ using System.ComponentModel.Composition.Hosting; using System.Linq; using System.Threading; using System.Threading.Tasks; -using SimpleInjector; namespace MediaBrowser.Controller { @@ -302,47 +301,15 @@ namespace MediaBrowser.Controller } /// <summary> - /// Gets or sets the zip client. - /// </summary> - /// <value>The zip client.</value> - private IZipClient ZipClient { get; set; } - - /// <summary> - /// Gets or sets the bluray examiner. - /// </summary> - /// <value>The bluray examiner.</value> - private IBlurayExaminer BlurayExaminer { get; set; } - - /// <summary> /// Creates a kernel based on a Data path, which is akin to our current programdata path /// </summary> /// <param name="appHost">The app host.</param> - /// <param name="isoManager">The iso manager.</param> - /// <param name="zipClient">The zip client.</param> - /// <param name="blurayExaminer">The bluray examiner.</param> /// <param name="logger">The logger.</param> /// <exception cref="System.ArgumentNullException">isoManager</exception> - public Kernel(IApplicationHost appHost, IIsoManager isoManager, IZipClient zipClient, IBlurayExaminer blurayExaminer, ILogger logger) - : base(appHost, isoManager, logger) + public Kernel(IApplicationHost appHost, ILogger logger) + : base(appHost, logger) { - if (isoManager == null) - { - throw new ArgumentNullException("isoManager"); - } - - if (zipClient == null) - { - throw new ArgumentNullException("zipClient"); - } - - if (blurayExaminer == null) - { - throw new ArgumentNullException("blurayExaminer"); - } - Instance = this; - ZipClient = zipClient; - BlurayExaminer = blurayExaminer; // For now there's no real way to inject this properly BaseItem.Logger = logger; @@ -356,26 +323,22 @@ namespace MediaBrowser.Controller /// Composes the exported values. /// </summary> /// <param name="container">The container.</param> - /// <param name="iocContainer">The _ioc container.</param> - protected override void ComposeExportedValues(CompositionContainer container, Container iocContainer) + protected override void RegisterExportedValues(CompositionContainer container) { - base.ComposeExportedValues(container, iocContainer); - container.ComposeExportedValue("kernel", this); - container.ComposeExportedValue("blurayExaminer", BlurayExaminer); - iocContainer.RegisterSingle(this); - iocContainer.RegisterSingle(BlurayExaminer); + ApplicationHost.Register(this); + + base.RegisterExportedValues(container); } /// <summary> /// Composes the parts with ioc container. /// </summary> /// <param name="allTypes">All types.</param> - /// <param name="container">The container.</param> - protected override void ComposePartsWithIocContainer(Type[] allTypes, Container container) + protected override void FindParts(Type[] allTypes) { - base.ComposePartsWithIocContainer(allTypes, container); + base.FindParts(allTypes); EntityResolutionIgnoreRules = GetExports<IResolutionIgnoreRule>(allTypes); UserDataRepositories = GetExports<IUserDataRepository>(allTypes); @@ -395,24 +358,22 @@ namespace MediaBrowser.Controller /// <returns>Task.</returns> protected override async Task ReloadInternal() { - Logger.Info("Extracting tools"); - // Reset these so that they can be lazy loaded again Users = null; RootFolder = null; - ReloadResourcePools(); - InstallationManager = new InstallationManager(this, ZipClient, Logger); - LibraryManager = new LibraryManager(this, Logger); - UserManager = new UserManager(this, Logger); - FFMpegManager = new FFMpegManager(this, ZipClient, Logger); - ImageManager = new ImageManager(this, Logger); - ProviderManager = new ProviderManager(this, Logger); - UserDataManager = new UserDataManager(this, Logger); - PluginSecurityManager = new PluginSecurityManager(this); - await base.ReloadInternal().ConfigureAwait(false); + ReloadResourcePools(); + InstallationManager = (InstallationManager)ApplicationHost.CreateInstance(typeof(InstallationManager)); + FFMpegManager = (FFMpegManager)ApplicationHost.CreateInstance(typeof(FFMpegManager)); + LibraryManager = (LibraryManager)ApplicationHost.CreateInstance(typeof(LibraryManager)); + UserManager = (UserManager)ApplicationHost.CreateInstance(typeof(UserManager)); + ImageManager = (ImageManager)ApplicationHost.CreateInstance(typeof(ImageManager)); + ProviderManager = (ProviderManager)ApplicationHost.CreateInstance(typeof(ProviderManager)); + UserDataManager = (UserDataManager)ApplicationHost.CreateInstance(typeof(UserDataManager)); + PluginSecurityManager = (PluginSecurityManager)ApplicationHost.CreateInstance(typeof(PluginSecurityManager)); + ReloadFileSystemManager(); await UserManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index cfd14f2b7..f9765d852 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -63,10 +63,6 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\packages\protobuf-net.2.0.0.621\lib\net40\protobuf-net.dll</HintPath> </Reference> - <Reference Include="SimpleInjector, Version=2.0.0.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL"> - <SpecificVersion>False</SpecificVersion> - <HintPath>..\packages\SimpleInjector.2.0.0-beta5\lib\net40-client\SimpleInjector.dll</HintPath> - </Reference> <Reference Include="System" /> <Reference Include="System.ComponentModel.Composition" /> <Reference Include="System.Core" /> diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs index 9bc1ebaa5..7ef70ea42 100644 --- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs +++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs @@ -4,9 +4,9 @@ using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Serialization; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,7 +17,6 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.MediaInfo { @@ -27,22 +26,6 @@ namespace MediaBrowser.Controller.MediaInfo public class FFMpegManager : BaseManager<Kernel> { /// <summary> - /// Holds the list of new items to generate chapter image for when the NewItemTimer expires - /// </summary> - private readonly List<Video> _newlyAddedItems = new List<Video>(); - - /// <summary> - /// The amount of time to wait before generating chapter images - /// </summary> - private const int NewItemDelay = 300000; - - /// <summary> - /// The current new item timer - /// </summary> - /// <value>The new item timer.</value> - private Timer NewItemTimer { get; set; } - - /// <summary> /// Gets or sets the video image cache. /// </summary> /// <value>The video image cache.</value> @@ -96,74 +79,10 @@ namespace MediaBrowser.Controller.MediaInfo AudioImageCache = new FileSystemRepository(AudioImagesDataPath); SubtitleCache = new FileSystemRepository(SubtitleCachePath); - Kernel.LibraryManager.LibraryChanged += LibraryManager_LibraryChanged; - Task.Run(() => VersionedDirectoryPath = GetVersionedDirectoryPath()); } /// <summary> - /// Handles the LibraryChanged event of the LibraryManager control. - /// </summary> - /// <param name="sender">The source of the event.</param> - /// <param name="e">The <see cref="ChildrenChangedEventArgs" /> instance containing the event data.</param> - void LibraryManager_LibraryChanged(object sender, ChildrenChangedEventArgs e) - { - var videos = e.ItemsAdded.OfType<Video>().ToList(); - - // Use a timer to prevent lots of these notifications from showing in a short period of time - if (videos.Count > 0) - { - lock (_newlyAddedItems) - { - _newlyAddedItems.AddRange(videos); - - if (NewItemTimer == null) - { - NewItemTimer = new Timer(NewItemTimerCallback, null, NewItemDelay, Timeout.Infinite); - } - else - { - NewItemTimer.Change(NewItemDelay, Timeout.Infinite); - } - } - } - } - - /// <summary> - /// Called when the new item timer expires - /// </summary> - /// <param name="state">The state.</param> - private async void NewItemTimerCallback(object state) - { - List<Video> newItems; - - // Lock the list and release all resources - lock (_newlyAddedItems) - { - newItems = _newlyAddedItems.ToList(); - _newlyAddedItems.Clear(); - - NewItemTimer.Dispose(); - NewItemTimer = null; - } - - // Limit the number of videos we generate images for - // The idea is to catch new items that are added here and there - // Mass image generation can be left to the scheduled task - foreach (var video in newItems.Where(c => c.Chapters != null).Take(3)) - { - try - { - await PopulateChapterImages(video, CancellationToken.None, true, true).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error creating chapter images for {0}", ex, video.Name); - } - } - } - - /// <summary> /// Releases unmanaged and - optionally - managed resources. /// </summary> /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> @@ -171,15 +90,8 @@ namespace MediaBrowser.Controller.MediaInfo { if (dispose) { - if (NewItemTimer != null) - { - NewItemTimer.Dispose(); - } - SetErrorMode(ErrorModes.SYSTEM_DEFAULT); - Kernel.LibraryManager.LibraryChanged -= LibraryManager_LibraryChanged; - AudioImageCache.Dispose(); VideoImageCache.Dispose(); } diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs index 2f617b5b1..b884d6c2d 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFMpegVideoImageProvider.cs @@ -15,6 +15,21 @@ namespace MediaBrowser.Controller.Providers.MediaInfo public class FFMpegVideoImageProvider : BaseFFMpegImageProvider<Video> { /// <summary> + /// The _iso manager + /// </summary> + private readonly IIsoManager _isoManager; + + /// <summary> + /// Initializes a new instance of the <see cref="FFMpegVideoImageProvider" /> class. + /// </summary> + /// <param name="isoManager">The iso manager.</param> + [ImportingConstructor] + public FFMpegVideoImageProvider([Import("isoManager")] IIsoManager isoManager) + { + _isoManager = isoManager; + } + + /// <summary> /// Supportses the specified item. /// </summary> /// <param name="item">The item.</param> @@ -30,7 +45,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo if (video != null) { - if (video.VideoType == VideoType.Iso && video.IsoType.HasValue && Kernel.Instance.IsoManager.CanMount(item.Path)) + if (video.VideoType == VideoType.Iso && video.IsoType.HasValue && _isoManager.CanMount(item.Path)) { return true; } @@ -82,7 +97,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo { if (item.VideoType == VideoType.Iso) { - return Kernel.Instance.IsoManager.Mount(item.Path, cancellationToken); + return _isoManager.Mount(item.Path, cancellationToken); } return NullMountTaskResult; diff --git a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs index 2df495b23..58fda20bb 100644 --- a/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs +++ b/MediaBrowser.Controller/Providers/MediaInfo/FFProbeVideoInfoProvider.cs @@ -32,13 +32,19 @@ namespace MediaBrowser.Controller.Providers.MediaInfo /// <value>The bluray examiner.</value> private IBlurayExaminer BlurayExaminer { get; set; } + /// <summary> + /// The _iso manager + /// </summary> + private readonly IIsoManager _isoManager; + /// <summary> /// Initializes a new instance of the <see cref="FFProbeVideoInfoProvider" /> class. /// </summary> + /// <param name="isoManager">The iso manager.</param> /// <param name="blurayExaminer">The bluray examiner.</param> /// <exception cref="System.ArgumentNullException">blurayExaminer</exception> [ImportingConstructor] - public FFProbeVideoInfoProvider([Import("blurayExaminer")] IBlurayExaminer blurayExaminer) + public FFProbeVideoInfoProvider([Import("isoManager")] IIsoManager isoManager, [Import("blurayExaminer")] IBlurayExaminer blurayExaminer) : base() { if (blurayExaminer == null) @@ -47,6 +53,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo } BlurayExaminer = blurayExaminer; + _isoManager = isoManager; BdInfoCache = new FileSystemRepository(Path.Combine(Kernel.Instance.ApplicationPaths.CachePath, "bdinfo")); } @@ -76,7 +83,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo { if (video.VideoType == VideoType.Iso) { - return Kernel.Instance.IsoManager.CanMount(item.Path); + return _isoManager.CanMount(item.Path); } return video.VideoType == VideoType.VideoFile || video.VideoType == VideoType.Dvd || video.VideoType == VideoType.BluRay; @@ -101,7 +108,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo { PopulateDvdStreamFiles(item, mount); } - + base.OnPreFetch(item, mount); } @@ -115,7 +122,7 @@ namespace MediaBrowser.Controller.Providers.MediaInfo { if (item.VideoType == VideoType.Iso) { - return Kernel.Instance.IsoManager.Mount(item.Path, cancellationToken); + return _isoManager.Mount(item.Path, cancellationToken); } return base.MountIsoIfNeeded(item, cancellationToken); diff --git a/MediaBrowser.Controller/packages.config b/MediaBrowser.Controller/packages.config index 6fd19eed9..e3e4367b7 100644 --- a/MediaBrowser.Controller/packages.config +++ b/MediaBrowser.Controller/packages.config @@ -2,5 +2,4 @@ <packages> <package id="morelinq" version="1.0.15631-beta" targetFramework="net45" /> <package id="protobuf-net" version="2.0.0.621" targetFramework="net45" /> - <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> </packages>
\ No newline at end of file diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index 919898aa3..fd296e213 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -1,9 +1,12 @@ using MediaBrowser.ClickOnce; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; using MediaBrowser.Controller; using MediaBrowser.IsoMounter; using MediaBrowser.Logging.Nlog; +using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.MediaInfo; using MediaBrowser.Model.Updates; using MediaBrowser.Server.Uninstall; using MediaBrowser.ServerApplication.Implementations; @@ -19,6 +22,7 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; +using SimpleInjector; namespace MediaBrowser.ServerApplication { @@ -74,6 +78,11 @@ namespace MediaBrowser.ServerApplication public string LogFilePath { get; private set; } /// <summary> + /// The container + /// </summary> + private Container _container = new Container(); + + /// <summary> /// Initializes a new instance of the <see cref="App" /> class. /// </summary> /// <param name="logger">The logger.</param> @@ -173,11 +182,25 @@ namespace MediaBrowser.ServerApplication } /// <summary> + /// Registers resources that classes will depend on + /// </summary> + private void RegisterResources() + { + Register(this); + Register(Logger); + Register<IIsoManager>(new PismoIsoManager(Logger)); + Register<IBlurayExaminer>(new BdInfoExaminer()); + Register<IZipClient>(new DotNetZipClient()); + } + + /// <summary> /// Loads the kernel. /// </summary> protected async void LoadKernel() { - Kernel = new Kernel(this, new PismoIsoManager(Logger), new DotNetZipClient(), new BdInfoExaminer(), Logger); + RegisterResources(); + + Kernel = new Kernel(this, Logger); try { @@ -378,7 +401,7 @@ namespace MediaBrowser.ServerApplication NlogManager.AddFileTarget(LogFilePath, Kernel.Configuration.EnableDebugLevelLogging); } - + /// <summary> /// Gets the image. /// </summary> @@ -485,5 +508,45 @@ namespace MediaBrowser.ServerApplication { return new ApplicationUpdater().UpdateApplication(cancellationToken, progress); } + + /// <summary> + /// Creates an instance of type and resolves all constructor dependancies + /// </summary> + /// <param name="type">The type.</param> + /// <returns>System.Object.</returns> + public object CreateInstance(Type type) + { + try + { + return _container.GetInstance(type); + } + catch + { + Logger.Error("Error creating {0}", type.Name); + + throw; + } + } + + /// <summary> + /// Registers the specified obj. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <param name="obj">The obj.</param> + public void Register<T>(T obj) + where T : class + { + _container.RegisterSingle(obj); + } + + /// <summary> + /// Resolves this instance. + /// </summary> + /// <typeparam name="T"></typeparam> + /// <returns>``0.</returns> + public T Resolve<T>() where T : class + { + return (T)_container.GetRegistration(typeof (T), true).GetInstance(); + } } } diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index 5923abc27..e16e97931 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -128,6 +128,10 @@ <SpecificVersion>False</SpecificVersion> <HintPath>..\ThirdParty\UPnP\Libs\Platinum.Managed.dll</HintPath> </Reference> + <Reference Include="SimpleInjector, Version=2.0.0.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\SimpleInjector.2.0.0-beta5\lib\net40-client\SimpleInjector.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Configuration" /> <Reference Include="System.Data" /> diff --git a/MediaBrowser.ServerApplication/packages.config b/MediaBrowser.ServerApplication/packages.config index c9cf3ee00..e1beae6da 100644 --- a/MediaBrowser.ServerApplication/packages.config +++ b/MediaBrowser.ServerApplication/packages.config @@ -3,5 +3,6 @@ <package id="DotNetZip" version="1.9.1.8" targetFramework="net45" /> <package id="Hardcodet.Wpf.TaskbarNotification" version="1.0.4.0" targetFramework="net45" /> <package id="NLog" version="2.0.0.2000" targetFramework="net45" /> + <package id="SimpleInjector" version="2.0.0-beta5" targetFramework="net45" /> <package id="System.Data.SQLite" version="1.0.84.0" targetFramework="net45" /> </packages>
\ No newline at end of file |
