private void ProcessAttributes(Type type, ICompiledExportStrategy strategy) { foreach (var customAttribute in type.GetTypeInfo().GetCustomAttributes()) { var lifestyleAttribute = customAttribute as ILifestyleProviderAttribute; if (lifestyleAttribute != null) { strategy.Lifestyle = lifestyleAttribute.ProvideLifestyle(type); } var condition = (customAttribute as IExportConditionAttribute)?.ProvideCondition(type); if (condition != null) { strategy.AddCondition(condition); } var metadata = (customAttribute as IExportMetadataAttribute)?.ProvideMetadata(type); if (metadata != null) { foreach (var keyValuePair in metadata) { strategy.SetMetadata(keyValuePair.Key, keyValuePair.Value); } } } foreach (var property in type.GetRuntimeProperties()) { foreach (var attribute in property.GetCustomAttributes()) { var importAttribute = attribute as IImportAttribute; if (importAttribute != null) { var injecitonInfo = importAttribute.ProvideImportInfo(property.PropertyType, property.Name); if (injecitonInfo != null) { strategy.MemberInjectionSelector(new KnownMemberInjectionSelector( new MemberInjectionInfo { MemberInfo = property, IsRequired = injecitonInfo.IsRequired, LocateKey = injecitonInfo.ImportKey })); } } } } foreach (var method in type.GetRuntimeMethods()) { foreach (var attribute in method.GetCustomAttributes()) { var importAttribute = attribute as IImportAttribute; var injectionInfo = importAttribute?.ProvideImportInfo(null, method.Name); if (injectionInfo != null) { strategy.MethodInjectionInfo(new MethodInjectionInfo { Method = method }); } } } }
/// <summary> /// Add a condition for property export /// </summary> /// <param name="condition">condition to add</param> /// <returns></returns> public IFluentExportMemberConfiguration <T> WithCondition(ICompiledCondition condition) { _exportStrategy.AddCondition(condition); return(this); }