using System.IO; using FluentMigrator.Runner; using NLog; using Nancy.Bootstrapper; using NzbDrone.Api; using NzbDrone.Common; using NzbDrone.Common.Messaging; using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore.Migration.Framework; using NzbDrone.Core.ExternalNotification; using NzbDrone.Core.Organizer; using NzbDrone.Core.RootFolders; using TinyIoC; namespace NzbDrone { public class MainAppContainerBuilder : ContainerBuilderBase { private static readonly Logger Logger = LogManager.GetLogger("ContainerBuilderBase"); public static TinyIoCContainer BuildContainer() { return new MainAppContainerBuilder().Container; } private MainAppContainerBuilder() : base("NzbDrone", "NzbDrone.Common", "NzbDrone.Core", "NzbDrone.Api") { AutoRegisterImplementations(); Container.Register().AsSingleton(); Container.Register().AsSingleton(); Container.Register().AsSingleton(); Container.Register().AsSingleton(); Container.Register(typeof(IBasicRepository), typeof(BasicRepository)).AsMultiInstance(); Container.Register(typeof(IBasicRepository), typeof(BasicRepository)).AsMultiInstance(); InitDatabase(); ReportingService.RestProvider = Container.Resolve(); } private void InitDatabase() { Logger.Info("Registering Database..."); //TODO: move this to factory var environmentProvider = new EnvironmentProvider(); var appDataPath = environmentProvider.GetAppDataPath(); if (!Directory.Exists(appDataPath)) { Directory.CreateDirectory(appDataPath); } Container.Register((c, p) => c.Resolve().Create(environmentProvider.GetNzbDroneDatabase())); } } }