OData-已添加DefaultODataSerializerProvider构造函数

OData-已添加DefaultODataSerializerProvider构造函数,odata,Odata,刚刚从Microsoft.AspNet.OData 5.9.0升级到6.0.0 DefaultODataSerializerProvider类现在有一个构造函数参数IServiceProvider var containerBuilder = new DefaultContainerBuilder(); config.UseCustomContainerBuilder(() => containerBuilder); config.Enab

刚刚从Microsoft.AspNet.OData 5.9.0升级到6.0.0

DefaultODataSerializerProvider类现在有一个构造函数参数IServiceProvider

        var containerBuilder = new DefaultContainerBuilder(); 
        config.UseCustomContainerBuilder(() => containerBuilder);
        config.EnableDependencyInjection();
        var serviceProvider = containerBuilder.BuildContainer();
        var oDataSerializerProvider = new DefaultODataSerializerProvider(serviceProvider);
我有一个实现DefaultODataSerializerProvider的类NullSerializerProvider

这是向HttpConfiguration添加格式化程序。 e、 g

我的问题:
NullSerializerProvider要求提供实现IServiceProvider的类的实例。如何提供此功能?

以下是有关OData依赖项注入的文档:

我花了整整一天的时间来讨论这些信息,并试图在Ninject周围创建我自己的IContainerBuilder,但运气不佳

我最终放弃了,让OData使用自己的DI容器,并将其与我对Ninject的使用分开。然后我意识到我可以创建DefaultContainerBuilder,并像定制容器生成器一样注册它。然后,我可以使用DefaultContainerBuilder获取IServiceProvider

        var containerBuilder = new DefaultContainerBuilder(); 
        config.UseCustomContainerBuilder(() => containerBuilder);
        config.EnableDependencyInjection();
        var serviceProvider = containerBuilder.BuildContainer();
        var oDataSerializerProvider = new DefaultODataSerializerProvider(serviceProvider);

我也面临着这个问题,经过一天的研究,我找到了这个解决方案:

using Microsoft.Extensions.DependencyInjection;
var serviceProvider = new ServiceCollection().BuildServiceProvider() as IServiceProvider;
现在,您可以创建自己的SerializerProvider或DeserializerProvider,并使用以下方法:

 var odataFormatters = ODataMediaTypeFormatters.Create(new DefaultODataSerializerProvider(serviceProvider), new JsonODataDeserializerProvider(serviceProvider));
 config.Formatters.AddRange(odataFormatters);
希望能节省很多时间和头痛