using System.Collections.Generic; using System.Linq; using DryIoc; using DryIoc.Microsoft.DependencyInjection; using FluentAssertions; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.Composition.Extensions; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Common.Options; using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore.Extensions; using NzbDrone.Core.Download; using NzbDrone.Core.Indexers; using NzbDrone.Core.Jobs; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; using NzbDrone.Host; using NzbDrone.SignalR; using NzbDrone.Test.Common; using IServiceProvider = System.IServiceProvider; namespace NzbDrone.App.Test { [TestFixture] public class ContainerFixture : TestBase { private IServiceProvider _container; [SetUp] public void SetUp() { var args = new StartupContext("first", "second"); var container = new Container(rules => rules.WithNzbDroneRules()) .AutoAddServices(Bootstrap.ASSEMBLIES) .AddNzbDroneLogger() .AddDummyDatabase() .AddStartupContext(args); // dummy lifetime and broadcaster so tests resolve container.RegisterInstance(new Mock().Object); container.RegisterInstance(new Mock().Object); container.RegisterInstance>(new Mock>().Object); container.RegisterInstance>(new Mock>().Object); container.RegisterInstance>(new Mock>().Object); container.RegisterInstance>(new Mock>().Object); container.RegisterInstance>(new Mock>().Object); container.RegisterInstance>(new Mock>().Object); _container = container.GetServiceProvider(); } [Test] public void should_be_able_to_resolve_indexers() { _container.GetRequiredService>().Should().NotBeEmpty(); } [Test] public void should_be_able_to_resolve_downloadclients() { _container.GetRequiredService>().Should().NotBeEmpty(); } [Test] public void container_should_inject_itself() { var factory = _container.GetRequiredService(); factory.Build().Should().NotBeNull(); } [Test] [Ignore("Shit appveyor")] public void should_return_same_instance_of_singletons() { var first = _container.GetServices>().OfType().Single(); var second = _container.GetServices>().OfType().Single(); first.Should().BeSameAs(second); } } }