Je viens d'essayer d'utiliser pour la première fois un enregistrement DI générique partiellement fermé en utilisant dotnet 3.1, v3 Azure functions et 3.1.8 du paquet MS DependencyInjection - tous les plus récents au moment de la rédaction.
Les types sont résolus comme espérés lorsqu'ils sont définis comme dépendances de constructeur. Cependant, lorsque j'appelle GetService<> directement sur le conteneur, j'obtiens un message d'erreur de type ArgumentException
:
Le nombre d'arguments génériques fournis n'est pas égal à l'arité de la définition du type générique.
Si je voyais cette erreur pendant l'exécution, j'en conclurais que les génériques partiellement fermés ne sont pas pris en charge, mais ce n'est pas le cas et je n'arrive pas à comprendre pourquoi.
public interface IMyInterface<TypeA, TypeB>
{
}
public class MyClass<TypeA> : IMyInterface<TypeA, MyConcreteTypeB>
{
}
services.AddSingleton(typeof(IMyInterface<,>), typeof(MyClass<>));
var myObject = services
.BuildServiceProvider()
.GetService<IMyInterface<MyConcreteTypeA, MyConcreteTypeB>>();
myObject.Should().Be().OfType<MyClass<MyConcreteTypeA>>();
Je ne peux pas exécuter le code (approximatif) ci-dessus en tant que test unitaire, mais je peux résoudre les problèmes suivants IMyInterface<MyConcreteTypeA, MyConcreteTypeB>
comme paramètre de construction dans une fonction Azure.
Mise à jour :
Exemple de travail : https://github.com/mr-panucci/sandbox