private void UseImportedValues <TImportDefinition>(IEnumerable <TImportDefinition> definitions, Action <ImportingItem, TImportDefinition, object> useImportValue, bool errorIfMissing) where TImportDefinition : ImportDefinition { var result = CompositionResult.SucceededResult; foreach (var definition in definitions) { ImportingItem import = GetImportingItemFromDefinition(definition); object value; if (!TryGetImportValue(definition, out value)) { if (!errorIfMissing) { continue; } if (definition.Cardinality == ImportCardinality.ExactlyOne) { var error = CompositionError.Create( CompositionErrorId.ImportNotSetOnPart, Strings.ImportNotSetOnPart, this.Definition.GetPartType().FullName, definition.ToString()); result = result.MergeError(error); continue; } else { value = import.CastExportsToImportType(new Export[0]); } } useImportValue(import, definition, value); } result.ThrowOnErrors(); }
private static void AssertCore(int retryCount, string prefix, CompositionError error, CompositionErrorExpectation expectation) { if (expectation.IdSpecified) { AssertCore(retryCount, prefix, "Id", expectation.Id, (ErrorId)error.Id); } if (expectation.ElementSpecified) { AssertCore(retryCount, prefix, "Element", expectation.Element, error.Element); } if (expectation.InnerExceptionSpecified) { AssertCore(retryCount, prefix, "InnerException", expectation.InnerException, error.InnerException); } if (expectation.InnerExceptionTypeSpecified) { AssertCore(retryCount, prefix, "InnerException.GetType()", expectation.InnerExceptionType, error.InnerException == null ? null : error.InnerException.GetType()); } if (expectation.InnerExpectationsSpecified) { var innerError = error.InnerException as ComposablePartException; if (innerError != null) { Assert.AreEqual(1, expectation.InnerExpectations.Length); AssertCore(retryCount, prefix + ".InnerException", innerError, expectation.InnerExpectations[0]); } else { AssertCore(retryCount, prefix + ".InnerException", (CompositionException)error.InnerException, expectation.InnerExpectations); } } }
internal static void AreEqual(CompositionError expected, CompositionError actual) { Assert.AreEqual(expected.Id, actual.Id); Assert.AreEqual(expected.Description, actual.Description); ExtendedAssert.IsInstanceOfSameType(expected.Exception, actual.Exception); }