コード例 #1
0
        // NOTE : these are here as Reflection member search is pretty expensive, and we want that to be done once.
        // Also, making these static would cause this class to fail loading if we rename members of ExportDefinition.
        //private static readonly PropertyInfo _exportDefinitionContractNameProperty = typeof(ExportDefinition).GetProperty("ContractName");
        //private static readonly PropertyInfo _exportDefinitionMetadataProperty = typeof(ExportDefinition).GetProperty("Metadata");
        //private static readonly MethodInfo _metadataContainsKeyMethod = typeof(IDictionary<string, object>).GetMethod("ContainsKey");
        //private static readonly MethodInfo _metadataItemMethod = typeof(IDictionary<string, object>).GetMethod("get_Item");
        //private static readonly MethodInfo _metadataEqualsMethod = typeof(object).GetMethod("Equals", new Type[] { typeof(object) });
        //private static readonly MethodInfo _typeIsInstanceOfTypeMethod = typeof(Type).GetMethod("IsInstanceOfType");

        public static Func <ExportDefinition, bool> CreateConstraint(IEnumerable <KeyValuePair <string, Type> > requiredMetadata)
        {
            if (requiredMetadata == null)
            {
                return(null);
            }

            var constraintInstance = new ConstraintInstance(requiredMetadata);
            var constraint         = constraintInstance.GetExportDefinitionConstraint();

            return(constraint);

            //ParameterExpression parameter = Expression.Parameter(typeof(ExportDefinition), "exportDefinition");
            //Expression metadataConstraintBody = null;

            //if (requiredMetadata != null)
            //{
            //    metadataConstraintBody = ConstraintServices.CreateMetadataConstraintBody(requiredMetadata, parameter);
            //}

            //if (metadataConstraintBody != null)
            //{
            //    return Expression.Lambda<Func<ExportDefinition, bool>>(metadataConstraintBody, parameter);
            //}

            //return null;
        }
コード例 #2
0
        public static Func <ExportDefinition, bool> CreateConstraint(
            string contractName,
            string requiredTypeIdentity,
            IEnumerable <KeyValuePair <string, Type> > requiredMetadata,
            CreationPolicy requiredCreationPolicy)
        {
            var constraintInstance = new ConstraintInstance(contractName, requiredTypeIdentity, requiredMetadata, requiredCreationPolicy);
            var constraint         = constraintInstance.GetExportDefinitionConstraint();

            return(constraint);

            //ParameterExpression parameter = Expression.Parameter(typeof(ExportDefinition), "exportDefinition");

            //Expression constraintBody = ConstraintServices.CreateContractConstraintBody(contractName, parameter);

            //if (!string.IsNullOrEmpty(requiredTypeIdentity))
            //{
            //    Expression typeIdentityConstraintBody = ConstraintServices.CreateTypeIdentityContraint(requiredTypeIdentity, parameter);

            //    constraintBody = Expression.AndAlso(constraintBody, typeIdentityConstraintBody);
            //}

            //if (requiredMetadata != null)
            //{
            //    Expression metadataConstraintBody = ConstraintServices.CreateMetadataConstraintBody(requiredMetadata, parameter);
            //    if (metadataConstraintBody != null)
            //    {
            //        constraintBody = Expression.AndAlso(constraintBody, metadataConstraintBody);
            //    }
            //}

            //if (requiredCreationPolicy != CreationPolicy.Any)
            //{
            //    Expression policyConstraintBody = ConstraintServices.CreateCreationPolicyContraint(requiredCreationPolicy, parameter);

            //    constraintBody = Expression.AndAlso(constraintBody, policyConstraintBody);
            //}

            //Expression<Func<ExportDefinition, bool>> constraint = Expression.Lambda<Func<ExportDefinition, bool>>(constraintBody, parameter);
            //return constraint;
        }