removed Autofac from update project.

pull/3113/head
Keivan Beigi 12 years ago
parent 55ece3d80d
commit 3f958109bb

@ -70,6 +70,9 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NLog.2.0.1.2\lib\net40\NLog.dll</HintPath>
</Reference>
<Reference Include="Omu.ValueInjecter">
<HintPath>..\packages\ValueInjecter.2.3.3\lib\net35\Omu.ValueInjecter.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="Microsoft.CSharp" />

@ -6,16 +6,15 @@ using AutoMapper;
using FluentValidation;
using Nancy;
using NzbDrone.Api.Extensions;
using NzbDrone.Api.REST;
using NzbDrone.Common;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Jobs.Implementations;
using NzbDrone.Core.Tv;
using NzbDrone.Core.Jobs;
using NzbDrone.Core.Model;
namespace NzbDrone.Api.Series
{
public class SeriesModule : NzbDroneApiModule
public class SeriesModule : RestModule<SeriesResource>
{
private readonly ISeriesService _seriesService;
private readonly IJobController _jobProvider;

@ -1,17 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NzbDrone.Api.QualityProfiles;
using NzbDrone.Core.Model;
using NzbDrone.Core.Qualities;
using NzbDrone.Api.REST;
namespace NzbDrone.Api.Series
{
public class SeriesResource
public class SeriesResource : RestResource<SeriesResource>
{
public Int32 Id { get; set; }
//Todo: Sorters should be done completely on the client
//Todo: Is there an easy way to keep IgnoreArticlesWhenSorting in sync between, Series, History, Missing?
//Todo: We should get the entire QualityProfile instead of ID and Name separately

@ -4,4 +4,5 @@
<package id="FluentValidation" version="3.4.6.0" targetFramework="net40" />
<package id="Nancy" version="0.16.1" targetFramework="net40" />
<package id="NLog" version="2.0.1.2" targetFramework="net40" />
<package id="ValueInjecter" version="2.3.3" targetFramework="net40" />
</packages>

@ -14,19 +14,19 @@ namespace NzbDrone.App.Test
[Test]
public void should_be_able_to_resolve_event_handlers()
{
ContainerBuilder.BuildNzbDroneContainer().Resolve<IEnumerable<IHandle>>().Should().NotBeEmpty();
MainAppContainerBuilder.BuildContainer().Resolve<IEnumerable<IHandle>>().Should().NotBeEmpty();
}
[Test]
public void should_be_able_to_resolve_indexers()
{
ContainerBuilder.BuildNzbDroneContainer().Resolve<IEnumerable<IIndexerBase>>().Should().NotBeEmpty();
MainAppContainerBuilder.BuildContainer().Resolve<IEnumerable<IIndexerBase>>().Should().NotBeEmpty();
}
[Test]
public void should_be_able_to_resolve_downlodclients()
{
ContainerBuilder.BuildNzbDroneContainer().Resolve<IEnumerable<IDownloadClient>>().Should().NotBeEmpty();
MainAppContainerBuilder.BuildContainer().Resolve<IEnumerable<IDownloadClient>>().Should().NotBeEmpty();
}
}
}

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using TinyIoC;
namespace NzbDrone.Common
{
public abstract class ContainerBuilderBase
{
protected TinyIoCContainer Container;
private readonly List<Type> _loadedTypes;
protected ContainerBuilderBase(params string[] assemblies)
{
Container = new TinyIoCContainer();
_loadedTypes = new List<Type>();
foreach (var assembly in assemblies)
{
_loadedTypes.AddRange(Assembly.Load(assembly).GetTypes());
}
AutoRegisterInterfaces();
}
private void AutoRegisterInterfaces()
{
var interfaces = _loadedTypes.Where(t => t.IsInterface);
foreach (var contract in interfaces)
{
AutoRegisterImplementations(contract);
}
}
protected void AutoRegisterImplementations<TContract>()
{
AutoRegisterImplementations(typeof(TContract));
}
private void AutoRegisterImplementations(Type contractType)
{
var implementations = GetImplementations(contractType).ToList();
if (implementations.Count == 0)
{
return;
}
if (implementations.Count == 1)
{
Container.Register(contractType, implementations.Single()).AsMultiInstance();
}
else
{
Container.RegisterMultiple(contractType, implementations).AsMultiInstance();
}
}
private IEnumerable<Type> GetImplementations(Type contractType)
{
return _loadedTypes
.Where(implementation =>
contractType.IsAssignableFrom(implementation) &&
!implementation.IsInterface &&
!implementation.IsAbstract
);
}
}
}

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@ -84,6 +84,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="ArchiveProvider.cs" />
<Compile Include="ContainerBuilderBase.cs" />
<Compile Include="EnsureThat\Ensure.cs" />
<Compile Include="EnsureThat\EnsureBoolExtensions.cs" />
<Compile Include="EnsureThat\EnsureCollectionExtensions.cs" />

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DotNetZip" version="1.9.1.8" />
<package id="FluentMigrator" version="1.0.6.0" targetFramework="net40" />

@ -69,7 +69,7 @@ namespace NzbDrone.Integration.Test
[SetUp]
public void SmokeTestSetup()
{
Container = ContainerBuilder.BuildNzbDroneContainer();
Container = MainAppContainerBuilder.BuildContainer();
InitDatabase();

@ -55,13 +55,6 @@
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Autofac.3.0.1\lib\net40\Autofac.dll</HintPath>
</Reference>
<Reference Include="Autofac.Configuration">
<HintPath>..\packages\Autofac.3.0.1\lib\net40\Autofac.Configuration.dll</HintPath>
</Reference>
<Reference Include="Exceptron.Client, Version=1.0.20.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Exceptron.Client.1.0.20\lib\net20\Exceptron.Client.dll</HintPath>
@ -84,6 +77,7 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Providers\UpdateProvider.cs" />
<Compile Include="UpdateContainerBuilder.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />

@ -1,9 +1,9 @@
using System;
using System.IO;
using Autofac;
using NLog;
using NzbDrone.Common;
using NzbDrone.Update.Providers;
using TinyIoC;
namespace NzbDrone.Update
{
@ -11,7 +11,7 @@ namespace NzbDrone.Update
{
private readonly UpdateProvider _updateProvider;
private readonly ProcessProvider _processProvider;
private static IContainer _container;
private static TinyIoCContainer _container;
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
@ -26,10 +26,8 @@ namespace NzbDrone.Update
try
{
Console.WriteLine("Starting NzbDrone Update Client");
var builder = new ContainerBuilder();
builder.RegisterAssemblyTypes(typeof(UpdateProvider).Assembly).SingleInstance();
builder.RegisterAssemblyTypes(typeof(RestProvider).Assembly).SingleInstance();
_container = builder.Build();
_container = UpdateContainerBuilder.Build();
logger.Info("Updating NzbDrone to version {0}", _container.Resolve<EnvironmentProvider>().Version);
_container.Resolve<Program>().Start(args);

@ -0,0 +1,19 @@
using NzbDrone.Common;
using TinyIoC;
namespace NzbDrone.Update
{
public class UpdateContainerBuilder : ContainerBuilderBase
{
public UpdateContainerBuilder()
: base("NzbDrone.Update", "NzbDrone.Common")
{
}
public static TinyIoCContainer Build()
{
return new UpdateContainerBuilder().Container;
}
}
}

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="3.0.1" targetFramework="net40" />
<package id="Exceptron.Client" version="1.0.20" targetFramework="net40" />
<package id="Exceptron.Nlog" version="1.0.11" targetFramework="net40" />
<package id="NLog" version="2.0.1.2" targetFramework="net40" />

@ -2,6 +2,7 @@
<FileVersion>1</FileVersion>
<AutoEnableOnStartup>True</AutoEnableOnStartup>
<AllowParallelTestExecution>true</AllowParallelTestExecution>
<AllowTestsToRunInParallelWithThemselves>true</AllowTestsToRunInParallelWithThemselves>
<FrameworkUtilisationTypeForNUnit>UseDynamicAnalysis</FrameworkUtilisationTypeForNUnit>
<FrameworkUtilisationTypeForGallio>Disabled</FrameworkUtilisationTypeForGallio>
<FrameworkUtilisationTypeForMSpec>Disabled</FrameworkUtilisationTypeForMSpec>

@ -41,7 +41,7 @@ namespace NzbDrone
return;
}
var container = ContainerBuilder.BuildNzbDroneContainer();
var container = MainAppContainerBuilder.BuildContainer();
container.Resolve<Router>().Route(args);
}

@ -1,118 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using FluentMigrator.Runner;
using NLog;
using Nancy.Bootstrapper;
using NzbDrone.Api;
using NzbDrone.Common;
using NzbDrone.Common.Eventing;
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 static class ContainerBuilder
{
private static readonly Logger Logger = LogManager.GetLogger("ContainerBuilder");
private static readonly List<Type> NzbDroneTypes;
static ContainerBuilder()
{
NzbDroneTypes = new List<Type>();
NzbDroneTypes.AddRange(Assembly.Load("NzbDrone").GetTypes());
NzbDroneTypes.AddRange(Assembly.Load("NzbDrone.Common").GetTypes());
NzbDroneTypes.AddRange(Assembly.Load("NzbDrone.Core").GetTypes());
NzbDroneTypes.AddRange(Assembly.Load("NzbDrone.Api").GetTypes());
}
public static TinyIoCContainer BuildNzbDroneContainer()
{
var container = new TinyIoCContainer();
container.AutoRegisterInterfaces();
container.AutoRegisterImplementations<ExternalNotificationBase>();
container.Register<IEventAggregator, EventAggregator>().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<NameSpecification>), typeof(BasicRepository<NameSpecification>)).AsMultiInstance();
container.InitDatabase();
ReportingService.RestProvider = container.Resolve<RestProvider>();
return container;
}
private static void InitDatabase(this TinyIoCContainer container)
{
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()));
}
private static void AutoRegisterInterfaces(this TinyIoCContainer container)
{
var interfaces = NzbDroneTypes.Where(t => t.IsInterface);
foreach (var contract in interfaces)
{
container.AutoRegisterImplementations(contract);
}
}
private static void AutoRegisterImplementations<TContract>(this TinyIoCContainer container)
{
container.AutoRegisterImplementations(typeof(TContract));
}
private static void AutoRegisterImplementations(this TinyIoCContainer container, Type contractType)
{
var implementations = GetImplementations(contractType).ToList();
if (implementations.Count == 0)
{
return;
}
if (implementations.Count == 1)
{
container.Register(contractType, implementations.Single()).AsMultiInstance();
}
else
{
container.RegisterMultiple(contractType, implementations).AsMultiInstance();
}
}
private static IEnumerable<Type> GetImplementations(Type contractType)
{
return NzbDroneTypes
.Where(implementation =>
contractType.IsAssignableFrom(implementation) &&
!implementation.IsInterface &&
!implementation.IsAbstract
);
}
}
}

@ -0,0 +1,61 @@
using System.IO;
using FluentMigrator.Runner;
using NLog;
using Nancy.Bootstrapper;
using NzbDrone.Api;
using NzbDrone.Common;
using NzbDrone.Common.Eventing;
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<IEventAggregator, EventAggregator>().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<NameSpecification>), typeof(BasicRepository<NameSpecification>)).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()));
}
}
}

@ -118,7 +118,7 @@
<Compile Include="ApplicationServer.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ContainerBuilder.cs" />
<Compile Include="MainAppContainerBuilder.cs" />
<Compile Include="ApplicationMode.cs" />
<Compile Include="AppMain.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

Loading…
Cancel
Save