예제 #1
0
파일: Mapper.cs 프로젝트: jangocheng/Mapper
        public static void MapConfiguration(Action <ModelTypeBuilder> buildAction)
        {
            var entityBuilder = new ModelTypeBuilder();

            buildAction(entityBuilder);
            entityBuilder.ConfigurationFinish();
        }
예제 #2
0
        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;
                }
            }
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
 public PropertyConfigurationBuilder(ModelTypeBuilder modelTypeBuilder)
     : base(modelTypeBuilder)
 {
 }