// 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; }
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; }