using System.IO; using NLog; using Nancy.Bootstrapper; using NzbDrone.Api; using NzbDrone.Api.SignalR; using NzbDrone.Common; using NzbDrone.Common.Composition; using NzbDrone.Common.Messaging; using NzbDrone.Core.Datastore; using NzbDrone.Core.Instrumentation; using NzbDrone.Core.Organizer; using NzbDrone.Core.RootFolders; namespace NzbDrone { public class MainAppContainerBuilder : ContainerBuilderBase { private static readonly Logger Logger = LogManager.GetLogger("ContainerBuilderBase"); public static IContainer BuildContainer() { return new MainAppContainerBuilder().Container; } private MainAppContainerBuilder() : base("NzbDrone", "NzbDrone.Common", "NzbDrone.Core", "NzbDrone.Api") { AutoRegisterImplementations<NzbDronePersistentConnection>(); Container.Register(typeof(IBasicRepository<RootFolder>), typeof(BasicRepository<RootFolder>)); Container.Register(typeof(IBasicRepository<NamingConfig>), typeof(BasicRepository<NamingConfig>)); Container.Register<INancyBootstrapper, NancyBootstrapper>(); InitDatabase(); } 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 => c.Resolve<IDbFactory>().Create(environmentProvider.GetNzbDroneDatabase())); Container.Register<ILogRepository>(c => { var db = c.Resolve<IDbFactory>().Create(environmentProvider.GetLogDatabase(), MigrationType.Log); return new LogRepository(db, c.Resolve<IMessageAggregator>()); }); } } }