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<ExternalNotificationBase>(); Container.Register<IMessageAggregator, MessageAggregator>().AsSingleton(); Container.Register<INancyBootstrapper, NancyBootstrapper>().AsSingleton(); Container.Register<IAnnouncer, MigrationLogger>().AsSingleton(); Container.Register<Router>().AsSingleton(); Container.Register(typeof(IBasicRepository<RootFolder>), typeof(BasicRepository<RootFolder>)).AsMultiInstance(); Container.Register(typeof(IBasicRepository<NamingConfig>), typeof(BasicRepository<NamingConfig>)).AsMultiInstance(); InitDatabase(); ReportingService.RestProvider = Container.Resolve<RestProvider>(); } 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<IDbFactory>().Create(environmentProvider.GetNzbDroneDatabase())); } } }