Esempio n. 1
0
        public void TypeActivatorRequiresPublicConstructor(CreateInstanceFunc createFunc)
        {
            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               CreateInstance <ClassWithPrivateCtor>(createFunc, provider: null));

            Assert.Equal(Resources.FormatNoConstructorMatch(typeof(ClassWithPrivateCtor)), ex.Message);
        }
Esempio n. 2
0
        public void TypeActivatorRequiresPublicConstructor(CreateInstanceFunc createFunc, Type type)
        {
            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               createFunc(provider: null, type: type, args: new object[0]));

            Assert.Equal(Resources.FormatNoConstructorMatch(type), ex.Message);
        }
Esempio n. 3
0
        public void TypeActivatorWorksWithCtorWithOptionalArgs(CreateInstanceFunc createFunc)
        {
            var provider     = new ServiceCollection().BuildServiceProvider();
            var anotherClass = CreateInstance <ClassWithOptionalArgsCtor>(createFunc, provider);

            Assert.NotNull(anotherClass);
            Assert.Equal("BLARGH", anotherClass.Whatever);
        }
        public void TypeActivatorThrowsOnMultipleMarkedCtors(CreateInstanceFunc createFunc)
        {
            // Act
            var exception = Assert.Throws <InvalidOperationException>(() => CreateInstance <ClassWithMultipleMarkedCtors>(createFunc, null, "hello"));

            // Assert
            Assert.Equal("Multiple constructors were marked with ActivatorUtilitiesConstructorAttribute.", exception.Message);
        }
        public void TypeActivatorThrowsWhenMarkedCtorDoesntAcceptArguments(CreateInstanceFunc createFunc)
        {
            // Act
            var exception = Assert.Throws <InvalidOperationException>(() => CreateInstance <ClassWithAmbiguousCtorsAndAttribute>(createFunc, null, 0, "hello"));

            // Assert
            Assert.Equal("Constructor marked with ActivatorUtilitiesConstructorAttribute does not accept all given argument types.", exception.Message);
        }
        public void TypeActivatorWorksWithStaticCtor(CreateInstanceFunc createFunc)
        {
            // Act
            var anotherClass = CreateInstance <ClassWithStaticCtor>(createFunc, provider: null);

            // Assert
            Assert.NotNull(anotherClass);
        }
Esempio n. 7
0
        public void TypeActivatorCanDisambiguateConstructorsWithUniqueArguments(CreateInstanceFunc createFunc)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddTransient <IFakeService, FakeService>()
                                  .BuildServiceProvider();

            var instance = CreateInstance <ClassWithAmbiguousCtors>(createFunc, serviceProvider, "1", 2);

            Assert.NotNull(instance);
        }
Esempio n. 8
0
        public void TypeActivatorRethrowsOriginalExceptionFromConstructor(CreateInstanceFunc createFunc)
        {
            var ex1 = Assert.Throws <Exception>(() =>
                                                CreateInstance <ClassWithThrowingEmptyCtor>(createFunc, provider: null));

            var ex2 = Assert.Throws <Exception>(() =>
                                                CreateInstance <ClassWithThrowingCtor>(createFunc, provider: null, args: new[] { new FakeService() }));

            Assert.Equal(nameof(ClassWithThrowingEmptyCtor), ex1.Message);
            Assert.Equal(nameof(ClassWithThrowingCtor), ex2.Message);
        }
Esempio n. 9
0
        public void UnRegisteredServiceAsConstructorParameterThrowsException(CreateInstanceFunc createFunc)
        {
            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <CreationCountFakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            var ex = Assert.Throws <ResolutionFailedException>(() =>
                                                               CreateInstance <CreationCountFakeService>(createFunc, serviceProvider));

            Assert.True(ex.Message.StartsWith($"Resolution of the dependency failed, type = \"{typeof(IFakeService)}\""));
        }
Esempio n. 10
0
        public void UnRegisteredServiceAsConstructorParameterThrowsException(CreateInstanceFunc createFunc)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddSingleton <CreationCountFakeService>()
                                  .BuildServiceProvider();

            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               CreateInstance <CreationCountFakeService>(createFunc, serviceProvider));

            Assert.Equal(Resources.FormatCannotResolveService(typeof(IFakeService), typeof(CreationCountFakeService)),
                         ex.Message);
        }
        public void TypeActivatorRequiresPublicConstructor(CreateInstanceFunc createFunc, Type type)
        {
            // Arrange
            var expectedMessage = $"A suitable constructor for type '{type}' could not be located. " +
                                  "Ensure the type is concrete and all parameters of a public constructor are either registered as services or passed as arguments. Also ensure no extraneous arguments are provided.";

            // Act and Assert
            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               createFunc(provider: null, type: type, args: Array.Empty <object>()));

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void TypeActivatorWorksWithCtorWithOptionalArgs_WithStructDefaults(CreateInstanceFunc createFunc)
        {
            // Arrange
            var provider        = new TestServiceCollection();
            var serviceProvider = CreateServiceProvider(provider);

            // Act
            var anotherClass = CreateInstance <ClassWithOptionalArgsCtorWithStructs>(createFunc, serviceProvider);

            // Assert
            Assert.NotNull(anotherClass);
        }
        public void TypeActivatorRequiresPublicConstructor(CreateInstanceFunc createFunc, Type type)
        {
            // Arrange
            var expectedMessage = $"A suitable constructor for type '{type}' could not be located. " +
                                  "Ensure the type is concrete and services are registered for all parameters of a public constructor.";

            // Act and Assert
            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               createFunc(provider: null, type: type, args: new object[0]));

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void UnRegisteredServiceAsConstructorParameterThrowsException(CreateInstanceFunc createFunc)
        {
            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <CreationCountFakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            var ex = Assert.Throws <InvalidOperationException>(() =>
                                                               CreateInstance <CreationCountFakeService>(createFunc, serviceProvider));

            Assert.Equal($"Unable to resolve service for type '{typeof(IFakeService)}' while attempting" +
                         $" to activate '{typeof(CreationCountFakeService)}'.",
                         ex.Message);
        }
        public void TypeActivatorWorksWithCtorWithOptionalArgs(CreateInstanceFunc createFunc)
        {
            // Arrange
            var provider        = new TestServiceCollection();
            var serviceProvider = CreateServiceProvider(provider);

            // Act
            var anotherClass = CreateInstance <ClassWithOptionalArgsCtor>(createFunc, serviceProvider);

            // Assert
            Assert.NotNull(anotherClass);
            Assert.Equal("BLARGH", anotherClass.Whatever);
        }
Esempio n. 16
0
        public void TypeActivatorRequiresAllArgumentsCanBeAccepted(CreateInstanceFunc createFunc)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddTransient <IFakeService, FakeService>()
                                  .BuildServiceProvider();

            var ex1 = Assert.Throws <InvalidOperationException>(() =>
                                                                CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, "1", "2", "3"));
            var ex2 = Assert.Throws <InvalidOperationException>(() =>
                                                                CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, 1, 2));

            Assert.Equal(Resources.FormatNoConstructorMatch(typeof(AnotherClassAcceptingData)), ex1.Message);
            Assert.Equal(Resources.FormatNoConstructorMatch(typeof(AnotherClassAcceptingData)), ex2.Message);
        }
        public void TypeActivatorUsesMarkedConstructor(CreateInstanceFunc createFunc)
        {
            // Arrange
            var serviceCollection = new TestServiceCollection();

            serviceCollection.AddSingleton <IFakeService, FakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            // Act
            var instance = CreateInstance <ClassWithAmbiguousCtorsAndAttribute>(createFunc, serviceProvider, "hello");

            // Assert
            Assert.Equal("IFakeService, string", instance.CtorUsed);
        }
        public void TypeActivatorCanDisambiguateConstructorsWithUniqueArguments(CreateInstanceFunc createFunc)
        {
            // Arrange
            var serviceCollection = new ServiceCollection()
                                    .AddTransient <IFakeService, FakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            // Act
            var instance = CreateInstance <ClassWithAmbiguousCtors>(createFunc, serviceProvider, "1", 2);

            // Assert
            Assert.NotNull(instance);
            Assert.NotNull(instance.FakeService);
            Assert.Equal("1", instance.Data1);
            Assert.Equal(2, instance.Data2);
        }
Esempio n. 19
0
        public void TypeActivatorWorksWithCtorWithOptionalArgs_WithStructDefaults(CreateInstanceFunc createFunc)
        {
            // Arrange
            var provider        = new TestServiceCollection();
            var serviceProvider = CreateServiceProvider(provider);

            // Act
            var anotherClass = CreateInstance <ClassWithOptionalArgsCtorWithStructs>(createFunc, serviceProvider);

            // Assert
            Assert.NotNull(anotherClass);
            Assert.Equal(ConsoleColor.DarkGreen, anotherClass.Color);
            Assert.Null(anotherClass.ColorNull);
            Assert.Equal(12, anotherClass.Integer);
            Assert.Null(anotherClass.IntegerNull);
        }
        public void TypeActivatorRequiresAllArgumentsCanBeAccepted(CreateInstanceFunc createFunc)
        {
            // Arrange
            var expectedMessage = $"A suitable constructor for type '{typeof(AnotherClassAcceptingData).FullName}' could not be located. " +
                                  "Ensure the type is concrete and services are registered for all parameters of a public constructor.";
            var serviceCollection = new ServiceCollection()
                                    .AddTransient <IFakeService, FakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            var ex1 = Assert.Throws <InvalidOperationException>(() =>
                                                                CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, "1", "2", "3"));
            var ex2 = Assert.Throws <InvalidOperationException>(() =>
                                                                CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, 1, 2));

            Assert.Equal(expectedMessage, ex1.Message);
            Assert.Equal(expectedMessage, ex2.Message);
        }
        public void TypeActivatorWorksWithCtorWithOptionalArgs_WithStructDefaults(CreateInstanceFunc createFunc)
        {
            // Arrange
            var provider        = new TestServiceCollection();
            var serviceProvider = CreateServiceProvider(provider);

            // Act
            var anotherClass = CreateInstance <ClassWithOptionalArgsCtorWithStructs>(createFunc, serviceProvider);

            // Assert
            Assert.NotNull(anotherClass);
            Assert.Equal(ConsoleColor.DarkGreen, anotherClass.Color);
            Assert.Null(anotherClass.ColorNull);
            Assert.Equal(12, anotherClass.Integer);
            Assert.Null(anotherClass.IntegerNull);
            // re-enable once https://github.com/dotnet/csharplang/issues/99 is implemented
            // see https://github.com/dotnet/runtime/issues/49069
            // Assert.Equal(ExpectStructWithPublicDefaultConstructorInvoked, anotherClass.StructWithConstructor.ConstructorInvoked);
        }
        public void TypeActivatorAcceptsAnyNumberOfAdditionalConstructorParametersToProvide(CreateInstanceFunc createFunc)
        {
            // Arrange
            var serviceCollection = new ServiceCollection()
                                    .AddTransient <IFakeService, FakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            // Act
            var anotherClass = CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, "1", "2");

            // Assert
            Assert.NotNull(anotherClass.FakeService);
            Assert.Equal("1", anotherClass.One);
            Assert.Equal("2", anotherClass.Two);
        }
        public void TypeActivatorEnablesYouToCreateAnyTypeWithServicesEvenWhenNotInIocContainer(CreateInstanceFunc createFunc)
        {
            // Arrange
            var serviceCollection = new ServiceCollection()
                                    .AddTransient <IFakeService, FakeService>();
            var serviceProvider = CreateServiceProvider(serviceCollection);

            var anotherClass = CreateInstance <AnotherClass>(createFunc, serviceProvider);

            Assert.NotNull(anotherClass.FakeService);
        }
 private static T CreateInstance <T>(CreateInstanceFunc func, IServiceProvider provider, params object[] args)
 {
     return((T)func(provider, typeof(T), args));
 }
Esempio n. 25
0
        public void TypeActivatorEnablesYouToCreateAnyTypeWithServicesEvenWhenNotInIocContainer(CreateInstanceFunc createFunc)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddTransient <IFakeService, FakeService>()
                                  .BuildServiceProvider();

            var anotherClass = CreateInstance <AnotherClass>(createFunc, serviceProvider);

            var result = anotherClass.LessSimpleMethod();

            Assert.Equal("[FakeServiceSimpleMethod]", result);
        }
Esempio n. 26
0
        public void TypeActivatorAcceptsAnyNumberOfAdditionalConstructorParametersToProvide(CreateInstanceFunc createFunc)
        {
            var serviceProvider = new ServiceCollection()
                                  .AddTransient <IFakeService, FakeService>()
                                  .BuildServiceProvider();


            var anotherClass = CreateInstance <AnotherClassAcceptingData>(createFunc, serviceProvider, "1", "2");

            var result = anotherClass.LessSimpleMethod();

            Assert.Equal("[FakeServiceSimpleMethod] 1 2", result);
        }