Пример #1
0
        public static IServiceCollection AddODataServices <T>(this IServiceCollection services)
        {
            if (services.HasService <RestierQueryExecutor>())
            {
                // Avoid applying multiple times to a same service collection.
                return(services);
            }

            services.AddService <IModelBuilder, RestierModelBuilder>();
            RestierModelExtender.ApplyTo(services, typeof(T));
            RestierOperationModelBuilder.ApplyTo(services, typeof(T));

            // Add OData Query Settings and validation settings
            Func <IServiceProvider, ODataQuerySettings> querySettingFactory = (sp) => new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.False,
                PageSize = null,  // no support for server enforced PageSize, yet
            };

            services.AddSingleton(typeof(ODataQuerySettings), querySettingFactory);
            services.AddSingleton <ODataValidationSettings>();

            // Make serializer and deserializer provider as DI services
            // WebApi OData service provider will be added first, need to overwrite.
            services.AddSingleton <ODataSerializerProvider, DefaultRestierSerializerProvider>();
            services.AddSingleton <ODataDeserializerProvider, DefaultRestierDeserializerProvider>();

            services.TryAddSingleton <IOperationExecutor, OperationExecutor>();
            services.AddSingleton <ODataPayloadValueConverter, RestierPayloadValueConverter>();

            services.AddService <IModelMapper, ModelMapper>();

            return(services.AddScoped <RestierQueryExecutorOptions>()
                   .AddService <IQueryExecutor, RestierQueryExecutor>());
        }
        public static IServiceCollection AddWebApiServices <T>(this IServiceCollection services)
        {
            RestierModelExtender.ApplyTo(services, typeof(T));
            RestierOperationModelBuilder.ApplyTo(services, typeof(T));

            // Add OData Query Settings and valiadtion settings
            Func <IServiceProvider, ODataQuerySettings> querySettingFactory = (sp) => new ODataQuerySettings
            {
                HandleNullPropagation = HandleNullPropagationOption.False,
                PageSize = null,  // no support for server enforced PageSize, yet
            };

            services.AddSingleton <ODataQuerySettings>(querySettingFactory);
            services.AddSingleton <ODataValidationSettings>();

            return
                (services.AddScoped <RestierQueryExecutorOptions>()
                 .ChainPrevious <IQueryExecutor, RestierQueryExecutor>());
        }