2017-07-12 1 views
2

Juste mis à jour de Microsoft.AspNet.OData 5.9.0 à 6.0.0.OData - constructeur DefaultODataSerializerProvider ajouté

La classe DefaultODataSerializerProvider possède maintenant un argument de constructeur IServiceProvider.

J'avais une classe NullSerializerProvider qui implémentait DefaultODataSerializerProvider.

Ceci ajoutait un formateur à HttpConfiguration. par exemple.

public static void Register(HttpConfiguration config) 
{ 
    ... 
    config.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create(new 
    NullSerializerProvider(), new DefaultODataDeserializerProvider())); 
} 

Ma question: NullSerializerProvider attend une instance d'une classe qui implémente IServiceProvider à fournir. Comment puis-je fournir cela?

Répondre

1

Voici la documentation sur l'injection de dépendance OData: http://odata.github.io/odata.net/v7/#01-05-di-support

http://odata.github.io/WebApi/#13-04-DependencyInjection

J'ai passé toute la journée de verser sur ces informations et essayer de créer mon propre IContainerBuilder autour Ninject sans chance. J'ai finalement abandonné et laissé OData utiliser son propre conteneur DI et le garder séparé de mon utilisation de Ninject. J'ai alors réalisé que je pouvais créer DefaultContainerBuilder et l'enregistrer comme un générateur de conteneur personnalisé. Je pourrais alors utiliser le DefaultContainerBuilder pour obtenir le IServiceProvider.

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

J'ai aussi dû faire face à cette question et après le jour de la recherche trouve cette solution:

using Microsoft.Extensions.DependencyInjection; 
var serviceProvider = new ServiceCollection().BuildServiceProvider() as IServiceProvider; 

Maintenant, vous pouvez créer votre propre SerializerProvider ou DeserializerProvider et utiliser comme:

var odataFormatters = ODataMediaTypeFormatters.Create(new DefaultODataSerializerProvider(serviceProvider), new JsonODataDeserializerProvider(serviceProvider)); 
config.Formatters.AddRange(odataFormatters); 

Espoir Cela fait gagner beaucoup de temps et de maux de tête.