1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-11-05 02:22:31 +01:00

removed Autofac from update project.

This commit is contained in:
Keivan Beigi 2013-04-19 17:05:48 -07:00
parent 55ece3d80d
commit 3f958109bb
18 changed files with 174 additions and 151 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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
);
}
}
}

View File

@ -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"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@ -84,6 +84,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ArchiveProvider.cs" /> <Compile Include="ArchiveProvider.cs" />
<Compile Include="ContainerBuilderBase.cs" />
<Compile Include="EnsureThat\Ensure.cs" /> <Compile Include="EnsureThat\Ensure.cs" />
<Compile Include="EnsureThat\EnsureBoolExtensions.cs" /> <Compile Include="EnsureThat\EnsureBoolExtensions.cs" />
<Compile Include="EnsureThat\EnsureCollectionExtensions.cs" /> <Compile Include="EnsureThat\EnsureCollectionExtensions.cs" />

View File

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

View File

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

View File

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

View File

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

View File

@ -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;
}
}
}

View File

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

View File

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

View File

@ -41,7 +41,7 @@ public static void Main(string[] args)
return; return;
} }
var container = ContainerBuilder.BuildNzbDroneContainer(); var container = MainAppContainerBuilder.BuildContainer();
container.Resolve<Router>().Route(args); container.Resolve<Router>().Route(args);
} }

View File

@ -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
);
}
}
}

View File

@ -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()));
}
}
}

View File

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