public static void MapConfiguration(Action <ModelTypeBuilder> buildAction) { var entityBuilder = new ModelTypeBuilder(); buildAction(entityBuilder); entityBuilder.ConfigurationFinish(); }
internal ApiParameterContext( IModelMetadataProvider metadataProvider, ODataRouteBuilderContext routeContext, ModelTypeBuilder modelTypeBuilder) { Contract.Requires(metadataProvider != null); Contract.Requires(routeContext != null); Contract.Requires(modelTypeBuilder != null); RouteContext = routeContext; MetadataProvider = metadataProvider; TypeBuilder = modelTypeBuilder; }
internal ODataRouteBuilderContext( HttpConfiguration configuration, ApiVersion apiVersion, ODataRoute route, HttpActionDescriptor actionDescriptor, IList <ApiParameterDescription> parameterDescriptions, ModelTypeBuilder modelTypeBuilder, ODataApiExplorerOptions options) { Contract.Requires(configuration != null); Contract.Requires(apiVersion != null); Contract.Requires(route != null); Contract.Requires(actionDescriptor != null); Contract.Requires(parameterDescriptions != null); Contract.Requires(modelTypeBuilder != null); Contract.Requires(options != null); ApiVersion = apiVersion; serviceProvider = configuration.GetODataRootContainer(route); EdmModel = serviceProvider.GetRequiredService <IEdmModel>(); Assemblies = configuration.Services.GetAssembliesResolver().GetAssemblies(); routeAttribute = actionDescriptor.GetCustomAttributes <ODataRouteAttribute>().FirstOrDefault(); RouteTemplate = routeAttribute?.PathTemplate; Route = route; ActionDescriptor = actionDescriptor; ParameterDescriptions = parameterDescriptions; Options = options; UrlKeyDelimiter = configuration.GetUrlKeyDelimiter() ?? Parentheses; var container = EdmModel.EntityContainer; if (container == null) { IsRouteExcluded = true; return; } EntitySet = container.FindEntitySet(actionDescriptor.ControllerDescriptor.ControllerName); Operation = container.FindOperationImports(actionDescriptor.ActionName).FirstOrDefault()?.Operation ?? EdmModel.FindDeclaredOperations(container.Namespace + "." + actionDescriptor.ActionName).FirstOrDefault(); ActionType = GetActionType(EntitySet, Operation); if (Operation?.IsAction() == true) { ConvertODataActionParametersToTypedModel(modelTypeBuilder, (IEdmAction)Operation); } }
void ConvertODataActionParametersToTypedModel(ModelTypeBuilder modelTypeBuilder, IEdmAction action) { Contract.Requires(modelTypeBuilder != null); Contract.Requires(action != null); var actionParameters = typeof(ODataActionParameters); var apiVersion = new Lazy <ApiVersion>(() => EdmModel.GetAnnotationValue <ApiVersionAnnotation>(EdmModel).ApiVersion); for (var i = 0; i < ParameterDescriptions.Count; i++) { var description = ParameterDescriptions[i]; var parameter = description.ParameterDescriptor; if (actionParameters.IsAssignableFrom(parameter.ParameterType)) { description.ParameterDescriptor = new ODataModelBoundParameterDescriptor(parameter, modelTypeBuilder.NewActionParameters(action, apiVersion.Value)); break; } } }
/// <summary> /// Initializes a new instance of the <see cref="ODataApiDescriptionProvider"/> class. /// </summary> /// <param name="routeCollectionProvider">The <see cref="IODataRouteCollectionProvider">OData route collection provider</see> associated with the description provider.</param> /// <param name="partManager">The <see cref="ApplicationPartManager">application part manager</see> containing the configured application parts.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider">provider</see> used to retrieve model metadata.</param> /// <param name="options">The <see cref="IOptions{TOptions}">container</see> of configured <see cref="ODataApiExplorerOptions">API explorer options</see>.</param> /// <param name="mvcOptions">A <see cref="IOptions{TOptions}">holder</see> containing the current <see cref="Mvc.MvcOptions">MVC options</see>.</param> public ODataApiDescriptionProvider( IODataRouteCollectionProvider routeCollectionProvider, ApplicationPartManager partManager, IModelMetadataProvider metadataProvider, IOptions <ODataApiExplorerOptions> options, IOptions <MvcOptions> mvcOptions) { Arg.NotNull(routeCollectionProvider, nameof(routeCollectionProvider)); Arg.NotNull(partManager, nameof(partManager)); Arg.NotNull(metadataProvider, nameof(metadataProvider)); Arg.NotNull(options, nameof(options)); Arg.NotNull(mvcOptions, nameof(mvcOptions)); RouteCollectionProvider = routeCollectionProvider; Assemblies = partManager.ApplicationParts.OfType <AssemblyPart>().Select(p => p.Assembly).ToArray(); TypeBuilder = new ModelTypeBuilder(Assemblies); MetadataProvider = metadataProvider; this.options = options; MvcOptions = mvcOptions.Value; modelMetadata = new Lazy <ModelMetadata>(NewModelMetadata); }
public PropertyConfigurationBuilder(ModelTypeBuilder modelTypeBuilder) : base(modelTypeBuilder) { }