SetValue(tc, new SomeDependency(), null);
// Find the right constructor and Invoke it. ConstructorInfo ci = typeof(TestClass). GetConstructors()[0];
(tc, null);}}
Je travaille actuellement sur un projet de passe-temps qui fonctionne comme ceci
Je trouve que mes constructeurs commencent à ressembler à ceci: public MyClass(Container con, SomeClass1 obj1, SomeClass2, obj2.... )
avec une liste de paramètres toujours croissante. Puisque "Container" est mon conteneur d'injection de dépendance, pourquoi ne puis-je pas faire ceci: public MyClass(Container con)
pour chaque classe? Quels sont les inconvénients? Si je fais cela, j'ai l'impression d'utiliser une statique glorifiée. S'il vous plaît partagez vos pensées sur la folie de l'IoC et de l'injection de dépendance.
Injection De Dépendance Co.Jp
ConfigureAppConfiguration((hostingContext, config) =>
dJsonFile("",
optional: false,
reloadOnChange: true);}). ConfigureWebHostDefaults(webBuilder =>
eStartup();});}
Le code suivant demande les paramètres IOptions au conteneur de services et les utilise dans la méthode Index:
public class SettingsController: Controller
private readonly SampleWebSettings _settings;
public SettingsController(IOptions settingsOptions)
_settings =;}
ViewData["Title"] =;
ViewData["Updates"] = _settings. Updates;
return View();}}
Ressources supplémentaires
consultez logique du contrôleur de Test dans Core pour savoir comment rendre le code plus facile à tester en demandant explicitement des dépendances dans les contrôleurs. Remplacez le conteneur d'injection de dépendances par défaut par une implémentation tierce. (). SetCompatibilityVersion(rsion_2_2);}
ViewData["Message"] = $"Current server time: {}";
CreateWebHostBuilder(args)()();}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
optional: false, // File is not optional.
Injection De Dépendance Ce Document
LogOperations($"{scope}-Call 1. GetRequiredService()");
Console. WriteLine("... ");
logger = tRequiredService();
logger. LogOperations($"{scope}-Call 2. WriteLine();}
Chaque méthode d'extension {SERVICE_NAME} ajoute (et éventuellement configure) des services. Il est recommandé que les applications suivent cette convention. Placez les méthodes d'extension dans l'espace de noms pendencyInjection pour encapsuler des groupes d'inscriptions de service. L'inclusion de la partie pendencyInjection espace de noms pour les méthodes d'extension di est également:
Permet de les afficher dans IntelliSense sans ajouter de blocs supplémentaires. Empêche des instructions excessives using dans les Program classes ou Startup où ces méthodes d'extension sont généralement appelées. L'application:
Crée une IHostBuilder instance avec les IHostBuilder. Configure les services et les ajoute avec leur durée de vie de service correspondante. Appelle Build() et assigne une instance de IHost.
Si je refactoriser le dé de la classe de ne pas utiliser l'int du constructeur, tout fonctionne bien. Mais maintenant que quelqu'un n'oubliez pas d'initialiser le numSides paramètre, ce qui semble une mauvaise idée, puisque c'est une exigence pour la classe. Je suppose que c'est un mauvais modèle mental pour DI. Quelqu'un peut-il m'éclairer? btw: N'êtes-vous pas sens Dice et pas Die? =)
Non, Mourir est singulier. dés est au pluriel. Je vais être mise en œuvre d'un Dé de la classe qui détient un certain nombre de filières, pouvez vérifier pour les doubles, etc. J'ai parfois déplacer le paramètre à partir d'un constructeur à un membre de la fonction: int Rouleau(int numSides)
Original L'auteur Alex Kilpatrick | 2012-08-27