public void Enumerable_DisposesInReverseOrderOfCreation()
        {
            FakeDisposeCallback fake_callback = new FakeDisposeCallback();

            IFakeDisposableCallbackService[] list;
            using (IUnityContainer provider = new UnityContainer())
            {
                // Arrange
                provider.RegisterInstance(fake_callback);

                provider.RegisterType <IFakeDisposableCallbackService, FakeDisposableCallbackService>("1", new ContainerControlledLifetimeManager());
                provider.RegisterType <IFakeDisposableCallbackService, FakeDisposableCallbackService>("2", new HierarchicalLifetimeManager());
                provider.RegisterType <IFakeDisposableCallbackService, FakeDisposableCallbackService>("3", new HierarchicalTransientLifetimeManager());
                provider.RegisterType <IFakeDisposableCallbackService, FakeDisposableCallbackService>("4", new ContainerControlledLifetimeManager());

                list = provider.ResolveAll <IFakeDisposableCallbackService>().ToArray();
                for (var i = 0; i < list.Length; i++)
                {
                    Assert.AreEqual(i, list[i].ID);
                }
            } // Act

            // Assert
            for (var i = 0; i < list.Length; i++)
            {
                Assert.AreEqual(list[list.Length - 1 - i].ID, ((IFakeDisposableCallbackService)fake_callback.Disposed[i]).ID);
            }
        }
 public FakeDisposableCallbackOuterServiceFixed(
     IFakeService singleService,
     IEnumerable <IFakeMultipleService> multipleServices,
     FakeDisposeCallback callback) : base(callback)
 {
     SingleService    = singleService;
     MultipleServices = multipleServices.ToArray();
 }
Beispiel #3
0
 public FakeDisposableCallbackInnerService(FakeDisposeCallback callback)
     : base(callback)
 {
 }
Beispiel #4
0
 public FakeDisposableCallbackService(FakeDisposeCallback callback)
 {
     _id       = _globalId++;
     _callback = callback;
 }
Beispiel #5
0
 public Singleton5(FakeDisposeCallback fakeDisposeCallback) : base(fakeDisposeCallback)
 {
 }
Beispiel #6
0
 public Singleton1(FakeDisposeCallback fakeDisposeCallback)
 {
     this.fakeDisposeCallback = fakeDisposeCallback;
 }
Beispiel #7
0
        public void EmitsCallSiteBuiltEvent()
        {
            // Arrange
            var serviceCollection   = new ServiceCollection();
            var fakeDisposeCallback = new FakeDisposeCallback();

            serviceCollection.AddSingleton(fakeDisposeCallback);
            serviceCollection.AddTransient <IFakeOuterService, FakeDisposableCallbackOuterService>();
            serviceCollection.AddSingleton <IFakeMultipleService, FakeDisposableCallbackInnerService>();
            serviceCollection.AddSingleton <IFakeMultipleService>(provider => new FakeDisposableCallbackInnerService(fakeDisposeCallback));
            serviceCollection.AddScoped <IFakeMultipleService, FakeDisposableCallbackInnerService>();
            serviceCollection.AddTransient <IFakeMultipleService, FakeDisposableCallbackInnerService>();
            serviceCollection.AddSingleton <IFakeService, FakeDisposableCallbackInnerService>();

            serviceCollection.BuildServiceProvider().GetService <IEnumerable <IFakeOuterService> >();

            var callsiteBuiltEvent = _listener.EventData.Single(e => e.EventName == "CallSiteBuilt");


            Assert.Equal(
                string.Join(Environment.NewLine,
                            "{",
                            "  \"serviceType\": \"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeOuterService]\",",
                            "  \"kind\": \"IEnumerable\",",
                            "  \"cache\": \"None\",",
                            "  \"itemType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeOuterService\",",
                            "  \"size\": \"1\",",
                            "  \"items\": [",
                            "    {",
                            "      \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeOuterService\",",
                            "      \"kind\": \"Constructor\",",
                            "      \"cache\": \"Dispose\",",
                            "      \"implementationType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposableCallbackOuterService\",",
                            "      \"arguments\": [",
                            "        {",
                            "          \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeService\",",
                            "          \"kind\": \"Constructor\",",
                            "          \"cache\": \"Root\",",
                            "          \"implementationType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposableCallbackInnerService\",",
                            "          \"arguments\": [",
                            "            {",
                            "              \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\",",
                            "              \"kind\": \"Constant\",",
                            "              \"cache\": \"None\",",
                            "              \"value\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\"",
                            "            }",
                            "          ]",
                            "        },",
                            "        {",
                            "          \"serviceType\": \"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService]\",",
                            "          \"kind\": \"IEnumerable\",",
                            "          \"cache\": \"None\",",
                            "          \"itemType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService\",",
                            "          \"size\": \"4\",",
                            "          \"items\": [",
                            "            {",
                            "              \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService\",",
                            "              \"kind\": \"Constructor\",",
                            "              \"cache\": \"Root\",",
                            "              \"implementationType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposableCallbackInnerService\",",
                            "              \"arguments\": [",
                            "                {",
                            "                  \"ref\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\"",
                            "                }",
                            "              ]",
                            "            },",
                            "            {",
                            "              \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService\",",
                            "              \"kind\": \"Factory\",",
                            "              \"cache\": \"Root\",",
                            "              \"method\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService <EmitsCallSiteBuiltEvent>b__0(System.IServiceProvider)\"",
                            "            },",
                            "            {",
                            "              \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService\",",
                            "              \"kind\": \"Constructor\",",
                            "              \"cache\": \"Scope\",",
                            "              \"implementationType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposableCallbackInnerService\",",
                            "              \"arguments\": [",
                            "                {",
                            "                  \"ref\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\"",
                            "                }",
                            "              ]",
                            "            },",
                            "            {",
                            "              \"serviceType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeMultipleService\",",
                            "              \"kind\": \"Constructor\",",
                            "              \"cache\": \"Dispose\",",
                            "              \"implementationType\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposableCallbackInnerService\",",
                            "              \"arguments\": [",
                            "                {",
                            "                  \"ref\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\"",
                            "                }",
                            "              ]",
                            "            }",
                            "          ]",
                            "        },",
                            "        {",
                            "          \"ref\": \"Microsoft.Extensions.DependencyInjection.Specification.Fakes.FakeDisposeCallback\"",
                            "        }",
                            "      ]",
                            "    }",
                            "  ]",
                            "}"),
                JObject.Parse(GetProperty <string>(callsiteBuiltEvent, "callSite")).ToString());

            Assert.Equal("System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.DependencyInjection.Specification.Fakes.IFakeOuterService]", GetProperty <string>(callsiteBuiltEvent, "serviceType"));
            Assert.Equal(0, GetProperty <int>(callsiteBuiltEvent, "chunkIndex"));
            Assert.Equal(1, GetProperty <int>(callsiteBuiltEvent, "chunkCount"));
            Assert.Equal(1, callsiteBuiltEvent.EventId);
        }