예제 #1
0
        /// <summary>
        /// Asynchronously submits changes made using an API context.
        /// </summary>
        /// <param name="api">
        /// An API.
        /// </param>
        /// <param name="changeSet">
        /// A change set, or <c>null</c> to submit existing pending changes.
        /// </param>
        /// <param name="cancellationToken">
        /// An optional cancellation token.
        /// </param>
        /// <returns>
        /// A task that represents the asynchronous
        /// operation whose result is a submit result.
        /// </returns>
        public static async Task <SubmitResult> SubmitAsync(
            this ApiBase api,
            ChangeSet changeSet = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Ensure.NotNull(api, "api");

            var submitContext = new SubmitContext(api.ServiceProvider, changeSet);

            return(await DefaultSubmitHandler.SubmitAsync(submitContext, cancellationToken));
        }
예제 #2
0
        /// <summary>
        /// Asynchronously submits changes made using an API context.
        /// </summary>
        /// <param name="context">
        /// An API context.
        /// </param>
        /// <param name="changeSet">
        /// A change set, or <c>null</c> to submit existing pending changes.
        /// </param>
        /// <param name="cancellationToken">
        /// An optional cancellation token.
        /// </param>
        /// <returns>
        /// A task that represents the asynchronous
        /// operation whose result is a submit result.
        /// </returns>
        public static async Task <SubmitResult> SubmitAsync(
            this ApiContext context,
            ChangeSet changeSet = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Ensure.NotNull(context, "context");

            var submitContext = new SubmitContext(context, changeSet);
            var model         = await context.GetModelAsync(cancellationToken);

            submitContext.Model = model;
            return(await DefaultSubmitHandler.SubmitAsync(submitContext, cancellationToken));
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ApiBase" /> class.
        /// </summary>
        /// <param name="serviceProvider">
        /// An <see cref="IServiceProvider"/> containing all services.
        /// </param>
        protected ApiBase(IServiceProvider serviceProvider)
        {
            ServiceProvider = serviceProvider;

            //RWM: This stuff SHOULD be getting passed into a constructor. But the DI implementation is less than awesome.
            //     So we'll work around it for now and still save some allocations.
            //     There are certain unit te
            var queryExpressionSourcer    = serviceProvider.GetService <IQueryExpressionSourcer>();
            var queryExpressionAuthorizer = serviceProvider.GetService <IQueryExpressionAuthorizer>();
            var queryExpressionExpander   = serviceProvider.GetService <IQueryExpressionExpander>();
            var queryExpressionProcessor  = serviceProvider.GetService <IQueryExpressionProcessor>();
            var changeSetInitializer      = serviceProvider.GetService <IChangeSetInitializer>();
            var changeSetItemAuthorizer   = serviceProvider.GetService <IChangeSetItemAuthorizer>();
            var changeSetItemValidator    = serviceProvider.GetService <IChangeSetItemValidator>();
            var changeSetItemFilter       = serviceProvider.GetService <IChangeSetItemFilter>();
            var submitExecutor            = serviceProvider.GetService <ISubmitExecutor>();

            if (queryExpressionSourcer == null)
            {
                // Missing sourcer
                throw new NotSupportedException(Resources.QuerySourcerMissing);
            }

            if (changeSetInitializer == null)
            {
                throw new NotSupportedException(Resources.ChangeSetPreparerMissing);
            }

            if (submitExecutor == null)
            {
                throw new NotSupportedException(Resources.SubmitExecutorMissing);
            }

            queryHandler  = new DefaultQueryHandler(queryExpressionSourcer, queryExpressionAuthorizer, queryExpressionExpander, queryExpressionProcessor);
            submitHandler = new DefaultSubmitHandler(changeSetInitializer, submitExecutor, changeSetItemAuthorizer, changeSetItemValidator, changeSetItemFilter);
        }
예제 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ApiBase" /> class.
 /// </summary>
 /// <param name="serviceProvider">
 /// An <see cref="IServiceProvider"/> containing all services of this <see cref="ApiConfiguration"/>.
 /// </param>
 protected ApiBase(IServiceProvider serviceProvider)
 {
     ServiceProvider = serviceProvider;
     submitHandler   = new DefaultSubmitHandler(serviceProvider);
 }