Esempio n. 1
0
        private Type GetDecoratorTypeFromDecoratorFactory(Type requestedServiceType,
                                                          DecoratorPredicateContext context)
        {
            Type decoratorType = this.data.DecoratorTypeFactory(context);

            if (decoratorType.Info().ContainsGenericParameters)
            {
                if (!requestedServiceType.Info().IsGenericType)
                {
                    throw new ActivationException(
                              StringResources.TheDecoratorReturnedFromTheFactoryShouldNotBeOpenGeneric(
                                  requestedServiceType, decoratorType));
                }

                Requires.TypeFactoryReturnedTypeThatDoesNotContainUnresolvableTypeArguments(
                    requestedServiceType, decoratorType);

                var builder = new GenericTypeBuilder(requestedServiceType, decoratorType);

                decoratorType = builder.BuildClosedGenericImplementation().ClosedGenericImplementation;

                // decoratorType == null when type constraints don't match.
                if (decoratorType != null)
                {
                    Requires.HasFactoryCreatedDecorator(this.data.Container, requestedServiceType, decoratorType);
                }
            }
            else
            {
                Requires.FactoryReturnsATypeThatIsAssignableFromServiceType(requestedServiceType, decoratorType);
            }

            return(decoratorType);
        }
        private GenericTypeBuilder.BuildResult BuildClosedGenericImplementation(
            Type serviceType, Type decoratorTypeDefinition)
        {
            var builder = new GenericTypeBuilder(serviceType, decoratorTypeDefinition);

            return(builder.BuildClosedGenericImplementation());
        }
Esempio n. 3
0
        private IEnumerable <string> ValidateFixedSettings()
        {
            string repoType = _settings.CertificateStore?.Repository?.Type;

            if (!GenericTypeBuilder.CanResolveTypeThatImplements <ICertificateRepository>(repoType))
            {
                yield return($"Certificate store type: {repoType} cannot be resolved");
            }
        }
Esempio n. 4
0
        private static T CreateInstance <T>(string typeString, params object[] args) where T : class
        {
            if (!GenericTypeBuilder.CanResolveTypeThatImplements <IStep>(typeString))
            {
                throw new InvalidOperationException(
                          $"Cannot resolve a valid {nameof(IStep)} implementation for the {typeString} fully-qualified assembly name");
            }

            return(GenericTypeBuilder.FromType(typeString).SetArgs(args).Build <T>());
        }
Esempio n. 5
0
            public void ThenBuilderFailsToCreateTypeForAssemblyName()
            {
                // Arrange
                const string typeString =
                    "Eu.EDelivery.AS4.Transformers.InvalidTransformer, Eu.EDelivery.AS4.Transformers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";

                // Act
                Assert.Throws <TypeLoadException>(
                    () => GenericTypeBuilder.FromType(typeString));
            }
Esempio n. 6
0
            public void ThenBuilderCreatesValidType()
            {
                // Arrange
                string typeString = typeof(object).FullName;
                // Act
                var instance = GenericTypeBuilder.FromType(typeString).Build <object>();

                // Assert
                Assert.NotNull(instance);
                Assert.IsType <object>(instance);
            }
Esempio n. 7
0
        private static ICertificateRepository ResolveCertificateRepository(string typeString)
        {
            if (!GenericTypeBuilder.CanResolveTypeThatImplements <ICertificateRepository>(typeString))
            {
                throw new InvalidOperationException(
                          $"Cannot resolve a valid {nameof(ICertificateRepository)} implementation for the {typeString} fully-qualified assembly name");
            }

            return(GenericTypeBuilder
                   .FromType(typeString)
                   .Build <ICertificateRepository>());
        }
        public void NotCreateOtherElements()
        {
            CompilerContext cc = new CompilerContext();
            GenericTypeBuilder gtb = new GenericTypeBuilder();
            TypeBuilder tb = new TypeBuilder();
            Testdata.ClassA classa = new Testdata.ClassA();
            System.Reflection.ReflectionClass rc = new System.Reflection.ReflectionClass();

            Assert.IsNull(TreeElementCreator.CreateFromObject("cc", cc));
            Assert.IsNull(TreeElementCreator.CreateFromObject("gtb", gtb));
            Assert.IsNull(TreeElementCreator.CreateFromObject("tb", tb));
            Assert.IsNull(TreeElementCreator.CreateFromObject("rc", rc));
        }
Esempio n. 9
0
        /// <summary>
        /// Creates a <see cref="ITransformer"/> implementation based on the given <paramref name="config"/>.
        /// </summary>
        /// <param name="config">The configuration which contains the type and the optional settings for the <see cref="ITransformer"/> implementation.</param>
        /// <returns></returns>
        public static ITransformer FromTransformerConfig(Transformer config)
        {
            GenericTypeBuilder builder = GenericTypeBuilder.FromType(config.Type);

            var transformer = builder.Build <ITransformer>();

            if (config.Setting == null)
            {
                return(transformer);
            }

            transformer.Configure(config.Setting.ToDictionary(s => s.Key, s => s.Value, StringComparer.OrdinalIgnoreCase));

            return(transformer);
        }
Esempio n. 10
0
        internal static void OpenGenericTypeDoesNotContainUnresolvableTypeArguments(
            Type serviceType, Type implementationType, string parameterName)
        {
            if (serviceType.ContainsGenericParameters() && implementationType.ContainsGenericParameters())
            {
                var builder = new GenericTypeBuilder(serviceType, implementationType);

                if (!builder.OpenGenericImplementationCanBeAppliedToServiceType())
                {
                    string error =
                        StringResources.OpenGenericTypeContainsUnresolvableTypeArguments(implementationType);

                    throw new ArgumentException(error, parameterName);
                }
            }
        }
Esempio n. 11
0
        private static IEnumerable <string> ValidateAgentSettings(AgentSettings settings)
        {
            if (settings.Receiver?.Type == null)
            {
                yield return($"Agent: {settings.Name} hasn't got a Receiver type configured");
            }
            else if (!GenericTypeBuilder.CanResolveTypeThatImplements <IReceiver>(settings.Receiver.Type))
            {
                yield return($"Agent: {settings.Name} Receiver type: {settings.Receiver.Type} cannot be resolved");
            }

            if (settings.Transformer?.Type == null)
            {
                yield return($"Agent: {settings.Name} hasn't got a Transformer type configured");
            }
            else if (!GenericTypeBuilder.CanResolveTypeThatImplements <ITransformer>(settings.Transformer.Type))
            {
                yield return($"Agent: {settings.Name} Transformer type: {settings.Transformer.Type} cannot be resolved");
            }

            if (settings.StepConfiguration?.NormalPipeline == null)
            {
                yield return($"Agent: {settings.Name} hasn't got a Steps.NormalPipeline Step type(s) configured");
            }
            else
            {
                foreach (Step s in settings.StepConfiguration.NormalPipeline)
                {
                    if (!GenericTypeBuilder.CanResolveTypeThatImplements <IStep>(s.Type))
                    {
                        yield return($"Agent: {settings.Name} has a Step in the NormalPipeline with type: {s.Type ?? "<null>"} that cannot be resolved");
                    }
                }
            }

            if (settings.StepConfiguration?.ErrorPipeline != null)
            {
                foreach (Step s in settings.StepConfiguration.ErrorPipeline)
                {
                    if (!GenericTypeBuilder.CanResolveTypeThatImplements <IStep>(s.Type))
                    {
                        yield return($"Agent: {settings.Name} has a Step in the NormalPipeline with type: {s.Type ?? "<null>"} that cannot be resolved");
                    }
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Build the <see cref="IReceiver"/> implementation
        /// </summary>
        /// <returns></returns>
        public IReceiver Build()
        {
            if (!GenericTypeBuilder.CanResolveTypeThatImplements <IReceiver>(_settingReceiver.Type))
            {
                throw new InvalidOperationException(
                          $"Cannot resolve a valid {nameof(IReceiver)} implementation for the {_settingReceiver.Type} fully-qualified assembly name");
            }

            var receiver = GenericTypeBuilder.FromType(_settingReceiver.Type).Build <IReceiver>();

            if (_settingReceiver.Setting != null)
            {
                receiver.Configure(_settingReceiver.Setting);
            }

            return(receiver);
        }
        private static IDynamicDiscoveryProfile ResolveDynamicDiscoveryProfile(string smpProfile)
        {
            if (smpProfile == null)
            {
                Logger.Debug($"SendingPMode doesn't specify DynamicDiscovery.SmpProfile element, using default: {nameof(LocalDynamicDiscoveryProfile)}");
                return(new LocalDynamicDiscoveryProfile());
            }

            if (!GenericTypeBuilder.CanResolveTypeThatImplements <IDynamicDiscoveryProfile>(smpProfile))
            {
                Logger.Error(
                    "SendingPMode.DynamicDiscovery.SmpProfile element doesn't have a fully-qualified assembly name "
                    + $"that can be used to resolve a instance that implements the {nameof(IDynamicDiscoveryProfile)} interface");

                throw new InvalidOperationException(
                          "Dynamic Discovery process was not correctly configured");
            }

            Logger.Debug($"SendingPMode specifies a DynamicDiscovery.SmpProfile element, resolve using: {smpProfile}");
            return(GenericTypeBuilder
                   .FromType(smpProfile)
                   .Build <IDynamicDiscoveryProfile>());
        }