J'ai travaillé sur la création de mon propre conteneur IoC à des fins d'apprentissage. Après avoir posé quelques questions à leur sujet, on m'a montré que créer une usine pour "résoudre" les objets était la meilleure solution (see third solution here). L'utilisateur Krzysztof Koźmic a montré que Castle Windsor peut réellement mettre en œuvre ceci pour vous. J'ai lu la source de CW toute la matinée. Je sais que lorsque Resolve est appelé, il "renvoie l'interface". Comment cette interface intercepte-t-elle les appels (puisqu'il n'y a pas d'implémentation derrière) et appelle-t-elle ses propres méthodes?Implémenter l'interface sans créer d'implémentation (proxies dynamiques?)
Je sais qu'il y a de la tromperie ici et c'est assez incroyable. Je ne suis pas du tout l'utilisateur comment l'interception est faite. J'ai essayé de m'aventurer dans le trou du lapin moi-même, mais je me suis perdu. Si quelqu'un pouvait me pointer dans la bonne direction, ce serait très apprécié.
Egalement - La création d'une fabrique dactylographiée ne dépendrait-elle pas du conteneur dans le code appelant? En termes ASP.NET MVC, c'est ce qu'il me semble.
EDIT: Trouvé Reflection.Emit ... cela pourrait-il être utile?
EDIT2: Plus je m'intéresse à cela, plus il semble compliqué de créer automatiquement des usines. Je pourrais finir par coller avec le code répétitif.
Merci pour le commentaire. J'essaie d'utiliser * "moqueur" pour mon conteneur IoC que j'essaie de faire. Castle Windsor utilise une sorte de technique pour créer une «usine typée» qui implémente l'interface spécifiée. Si vous lisez le lien que j'ai posté de Krzysztof, vous verrez ce que je veux dire. Je ne veux pas utiliser une bibliothèque tierce car c'est tout pour mon propre apprentissage. Auriez-vous des ressources sur la génération de classe? EDIT: Je sais que je n'ai pas besoin d'utiliser IL, je suis juste curieux de savoir comment c'est fait. Merci! :) – TheCloudlessSky
Merci pour votre aide. Je vais commencer à lire. Je ne pourrais pas implémenter cette fonctionnalité parce qu'elle semble si extrême. Mais, je vais y jeter un coup d'œil parce que c'est très intéressant. Merci! – TheCloudlessSky
@TheCloudlessSky, IL est très amusant, car vous pouvez faire des choses très puissantes avec. Cela prend beaucoup de travail, et les méthodes Emit sont assez persnickety (ils ne fournissent aucune vérification que vous avez inclus les arguments corrects, donc il est très facile de créer par erreur le code IL qui ne parvient pas à vérifier ou exploser à l'exécution. Si vous jouez avec, n'oubliez pas que peverify.exe est votre ami. –