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.Notifications; 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(); AutoRegisterImplementations(); Container.Register(typeof(IBasicRepository), typeof(BasicRepository)); Container.Register(typeof(IBasicRepository), typeof(BasicRepository)); Container.Register(); 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().Create(environmentProvider.GetNzbDroneDatabase())); Container.Register(c => { var db = c.Resolve().Create(environmentProvider.GetLogDatabase(), MigrationType.Log); return new LogRepository(db, c.Resolve()); }); } } }