/// <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)); }
/// <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)); }
/// <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); }
/// <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); }