public void DefineProvider(QualifiedName name, Type providerType, MethodInfo factoryMethod, object metadata = null) { if (providerType == null) { throw new ArgumentNullException("providerType"); } if (factoryMethod == null) { throw new ArgumentNullException("factoryMethod"); } if (!factoryMethod.IsStatic || !providerType.IsAssignableFrom(factoryMethod.ReturnType)) { throw RuntimeFailure.InvalidProviderFieldOrMethod("factoryMethod"); } var qn = GetName(name, factoryMethod.DeclaringType, factoryMethod.Name); var methodResult = new ProviderMethod(factoryMethod, providerType, qn); methodResult.ProviderMetadata = ProviderMetadataWrapper.Create(metadata); methodResult.ProviderMetadata.Source = methodResult; AppendResult(methodResult); }