Je construis un morceau générique de logiciel middleware (un service de Windows) qui effectuera de nombreux jobs
.. tels que:Quel est le meilleur moyen de transmettre les paramètres du constructeur d'exécution à Autofac?
- Sync Inventaire
- Les commandes d'importation
- etc
I J'utilise C# avec un service Windows et Quartz.NET pour planifier les travaux à exécuter. J'utilise aussi AutoFac. D'après ce que je comprends, les dépendances AutoFac devraient être construites à la racine de la composition. C'est bien, mais j'ai certains services injectés qui nécessitent des paramètres d'exécution (les valeurs de configuration proviennent de la base de données).
Par exemple:
- Certains emplois vont se connecter à un serveur SFTP dans lequel les informations de connexion sont stockées sous forme de paires de valeurs clés dans la base de données
- Certains emplois vont se connecter à une API à distance dans lequel les informations d'authentification API sont stockés par rapport au travail dans la base de données.
Je l'ai fait quelques recherches sur ce sujet et certaines alternatives suggère essentiellement de retirer le constructeur de certains de ces services (comme un client SFTP) et les transmettre comme méthodes de configuration ..
au lieu du client avoir un constructeur tel que
SftpClient(string host, string username, string password, int timeoutInSeconds)
Il aurait un constructeur par défaut, et une méthode de configuration que vous passez dans ces.
Je n'aime pas ça du tout - cela va à l'encontre de ce que j'ai appris en essayant de configurer votre objet afin qu'il soit cohérent avec le constructeur.
Quelles sont les meilleures options? Ma méthode JobFactory
prend actuellement une dépendance sur IComponentContext
. J'ai vu qu'il existe des moyens de transmettre des paramètres à AutoFac pour construire l'objet, mais les choses que j'ai lues suggèrent que ce n'est pas idéal. Vaut-il mieux utiliser mon usine pour
Merci - et je suppose que les classes Factory seraient dans le même espace de noms que le client lui-même? Tels que, j'ai un projet "commun" séparé où ces services communs et clients vivent - ils iraient dans cet espace de noms et pas l'espace de noms du consommateur droit? – Lock
Correct. L'usine va avec la classe (s) qu'il crée. Le consommateur ne doit pas savoir ou se soucier de l'origine de l'instance, à condition qu'elle se conforme à une interface. –
Je ne vois pas comment je peux utiliser cette méthode quand j'ai des dépendances imbriquées. Dire par exemple ISmtpClient avait une dépendance sur IDependancy qui avait besoin de certaines valeurs d'exécution aussi .. comment cela fonctionnerait-il? – Lock