public void Ctor_ThrowsArgumentNull()
 {
     assert.Throws <ArgumentNullException>(() =>
     {
         _ = new ReflectionParameter(null);
     });
 }
示例#2
0
        public static ReflectionParameterImportDefinition CreateParameterImportDefinition(ParameterInfo parameter, ICompositionElement origin)
        {
            Requires.NotNull(parameter, "parameter");

            ReflectionParameter reflectionParameter = parameter.ToReflectionParameter();
            IAttributedImport   attributedImport    = AttributedModelDiscovery.GetAttributedImport(reflectionParameter, parameter);
            ImportType          importType          = new ImportType(reflectionParameter.ReturnType, attributedImport.Cardinality);

            if (importType.IsPartCreator)
            {
                return(new PartCreatorParameterImportDefinition(
                           new Lazy <ParameterInfo>(() => parameter),
                           origin,
                           new ContractBasedImportDefinition(
                               attributedImport.GetContractNameFromImport(importType),
                               attributedImport.GetTypeIdentityFromImport(importType),
                               CompositionServices.GetRequiredMetadata(importType.MetadataViewType),
                               attributedImport.Cardinality,
                               false,
                               true,
                               CreationPolicy.NonShared)));
            }
            else
            {
                return(new ReflectionParameterImportDefinition(
                           new Lazy <ParameterInfo>(() => parameter),
                           attributedImport.GetContractNameFromImport(importType),
                           attributedImport.GetTypeIdentityFromImport(importType),
                           CompositionServices.GetRequiredMetadata(importType.MetadataViewType),
                           attributedImport.Cardinality,
                           attributedImport.RequiredCreationPolicy,
                           origin));
            }
        }
示例#3
0
        public static void AreSame(ReflectionItem expected, ReflectionItem actual)
        {
            switch (expected.ItemType)
            {
            case ReflectionItemType.Property:
            {
                ReflectionProperty expectedProperty = (ReflectionProperty)expected;
                ReflectionProperty actualProperty   = (ReflectionProperty)actual;

                ReflectionAssert.AreSame(expectedProperty.UnderlyingGetMethod, actualProperty.UnderlyingGetMethod);
                ReflectionAssert.AreSame(expectedProperty.UnderlyingSetMethod, actualProperty.UnderlyingSetMethod);
                return;
            }

            case ReflectionItemType.Parameter:
            {
                ReflectionParameter expectedParameter = (ReflectionParameter)expected;
                ReflectionParameter actualParameter   = (ReflectionParameter)actual;

                ReflectionAssert.AreSame(expectedParameter.UnderlyingParameter, actualParameter.UnderlyingParameter);
                return;
            }

            default:
            {
                ReflectionMember expectedMember = (ReflectionMember)expected;
                ReflectionMember actualMember   = (ReflectionMember)actual;

                ReflectionAssert.AreSame(expectedMember.UnderlyingMember, actualMember.UnderlyingMember);
                return;
            }
            }
        }
示例#4
0
        public void ReflectionParameterTest()
        {
            var intPropertyClassInstance        = EnvironmentManager.CreateInstanceWithProperty(4);
            var intPrivatePropertyClassInstance = EnvironmentManager.CreateInstanceWithPrivateProperty(8);
            var intFieldClassInstance           = EnvironmentManager.CreateInstanceWithField(6);
            var intPrivateFieldClassInstance    = EnvironmentManager.CreateInstanceWithPrivateField(7);

            var stringPropertyClassInstance        = EnvironmentManager.CreateInstanceWithProperty("qwerty1");
            var stringPrivatePropertyClassInstance = EnvironmentManager.CreateInstanceWithPrivateProperty("qwerty2");
            var stringFieldClassInstance           = EnvironmentManager.CreateInstanceWithField("qwerty3");
            var stringPrivateFieldClassInstance    = EnvironmentManager.CreateInstanceWithPrivateField("qwerty4");

            var intParameter    = new ReflectionParameter <int>();
            var stringParameter = new ReflectionParameter <string>();

            intParameter.Target     = intPropertyClassInstance;
            intParameter.SourceName = nameof(intPropertyClassInstance.Property);
            intParameter.GetParamType().Should().BeAssignableTo <int>();
            intParameter.GetValue().Should().Be(4);

            intParameter.Target     = intPrivatePropertyClassInstance;
            intParameter.SourceName = nameof(intPropertyClassInstance.Property);
            intParameter.GetParamType().Should().BeAssignableTo <int>();
            intParameter.GetValue().Should().Be(null);

            intParameter.Target     = intFieldClassInstance;
            intParameter.SourceName = nameof(intFieldClassInstance.Field);
            intParameter.GetParamType().Should().BeAssignableTo <int>();
            intParameter.GetValue().Should().Be(6);

            intParameter.Target     = intPrivateFieldClassInstance;
            intParameter.SourceName = nameof(intFieldClassInstance.Field);
            intParameter.GetParamType().Should().BeAssignableTo <int>();
            intParameter.GetValue().Should().Be(7);

            stringParameter.Target     = stringPropertyClassInstance;
            stringParameter.SourceName = nameof(stringPropertyClassInstance.Property);
            stringParameter.GetParamType().Should().BeAssignableTo <string>();
            stringParameter.GetValue().Should().Be("qwerty1");

            stringParameter.Target     = stringPrivatePropertyClassInstance;
            stringParameter.SourceName = nameof(stringPropertyClassInstance.Property);
            stringParameter.GetParamType().Should().BeAssignableTo <string>();
            stringParameter.GetValue().Should().Be(null);

            stringParameter.Target     = stringFieldClassInstance;
            stringParameter.SourceName = nameof(stringFieldClassInstance.Field);
            stringParameter.GetParamType().Should().BeAssignableTo <string>();
            stringParameter.GetValue().Should().Be("qwerty3");

            stringParameter.Target     = stringPrivateFieldClassInstance;
            stringParameter.SourceName = nameof(stringFieldClassInstance.Field);
            stringParameter.GetParamType().Should().BeAssignableTo <string>();
            stringParameter.GetValue().Should().Be("qwerty4");
        }
    public void FindAttribute()
    {
        var first = ReflectData
                    .GetParameters("GetUser")
                    .FirstOrDefault();
        var reflectionParameter = new ReflectionParameter(first);

        var attr = reflectionParameter.FindAttribute <DecoratorAttribute>();

        assert.NotNull(attr);
    }
    public void FindAttributes()
    {
        var first = ReflectData
                    .GetParameters("GetUser")
                    .FirstOrDefault();
        var reflectionParameter = new ReflectionParameter(first);

        var attrs = reflectionParameter.FindAttributes <DecoratorAttribute>();

        assert.NotNull(attrs);
        assert.Equal(1, attrs.Count);
    }
示例#7
0
        public static ImportDefinition CreateParameterImport(ParameterInfo parameter, ICompositionElement origin)
        {
            ReflectionParameter reflectionParameter = new ReflectionParameter(parameter);
            IAttributedImport   attributedImport    = ReflectionPartCreation.GetAttributedImport((ICustomAttributeProvider)parameter);

            if (string.IsNullOrEmpty(attributedImport.ContractName))
            {
                return(new ImportDefinition(parameter.Name, parameter.ParameterType));
            }

            return(new ContractBasedImportDefinition(parameter.Name, parameter.ParameterType, attributedImport.ContractName));
        }
    public void Ctor()
    {
        var first = ReflectData
                    .GetParameters("GetUser")
                    .FirstOrDefault();
        var reflectionParameter = new ReflectionParameter(first);

        assert.Equal(first.Name, reflectionParameter.Name);
        assert.Equal(first.ParameterType, reflectionParameter.ClrType);
        assert.Equal(first.Position, reflectionParameter.Position);
        assert.Equal(first.IsOut, reflectionParameter.IsOut);
        assert.Equal(first.IsOptional, reflectionParameter.IsOptional);
        assert.Equal(first.DefaultValue, reflectionParameter.DefaultValue);
        assert.NotNull(reflectionParameter.Attributes);
    }
        public static ReflectionParameterImportDefinition CreateParameterImportDefinition(ParameterInfo parameter, ICompositionElement origin)
        {
            Requires.NotNull(parameter, "parameter");

            ReflectionParameter reflectionParameter = parameter.ToReflectionParameter();

            AttributedImportDefinitionCreationInfo importCreationInfo = AttributedModelDiscovery.GetImportDefinitionCreationInfo(reflectionParameter, parameter);

            return(new ReflectionParameterImportDefinition(
                       parameter.AsLazy(),
                       importCreationInfo.ContractName,
                       importCreationInfo.RequiredTypeIdentity,
                       importCreationInfo.RequiredMetadata,
                       importCreationInfo.Cardinality,
                       importCreationInfo.RequiredCreationPolicy,
                       origin));
        }
示例#10
0
        public static ReflectionParameterImportDefinition CreateParameterImportDefinition(ParameterInfo parameter, ICompositionElement origin)
        {
            Requires.NotNull(parameter, "parameter");

            ReflectionParameter reflectionParameter = parameter.ToReflectionParameter();
            IAttributedImport   attributedImport    = AttributedModelDiscovery.GetAttributedImport(reflectionParameter, parameter);
            ImportType          importType          = new ImportType(reflectionParameter.ReturnType, attributedImport.Cardinality);

            if (importType.IsPartCreator)
            {
                return(new PartCreatorParameterImportDefinition(
                           new Lazy <ParameterInfo>(() => parameter),
                           origin,
                           new ContractBasedImportDefinition(
                               attributedImport.GetContractNameFromImport(importType),
                               attributedImport.GetTypeIdentityFromImport(importType),
                               CompositionServices.GetRequiredMetadata(importType.MetadataViewType),
                               attributedImport.Cardinality,
                               false,
                               true,
                               (attributedImport.RequiredCreationPolicy != CreationPolicy.NewScope) ? CreationPolicy.NonShared : CreationPolicy.NewScope,
                               CompositionServices.GetImportMetadata(importType, attributedImport))));
            }
            else
            {
                // A Standard import is not allowed to be marked as requiring NewScope at this time.
                if (attributedImport.RequiredCreationPolicy == CreationPolicy.NewScope)
                {
                    throw new ComposablePartException(
                              String.Format(CultureInfo.CurrentCulture,
                                            Strings.InvalidPartCreationPolicyOnImport,
                                            attributedImport.RequiredCreationPolicy),
                              origin);
                }
                return(new ReflectionParameterImportDefinition(
                           new Lazy <ParameterInfo>(() => parameter),
                           attributedImport.GetContractNameFromImport(importType),
                           attributedImport.GetTypeIdentityFromImport(importType),
                           CompositionServices.GetRequiredMetadata(importType.MetadataViewType),
                           attributedImport.Cardinality,
                           attributedImport.RequiredCreationPolicy,
                           CompositionServices.GetImportMetadata(importType, attributedImport),
                           origin));
            }
        }
 public CommonParameter(MonoCecilParameter monoCecilParameter, ReflectionParameter reflectionParameter)
 {
     MonoCecilParameter  = monoCecilParameter;
     ReflectionParameter = reflectionParameter;
 }
示例#12
0
 public override IEnumerable <T> GetCustomAttributes <T>()
 {
     return(ReflectionParameter.GetCustomAttributes <T>());
 }