Fourniture d’une fonctionnalité de firebase database personnalisée au fournisseur d’adhésion asp.net personnalisé

Je crée un fournisseur d’adhésion personnalisé pour mon application asp.net. J’ai également créé une classe distincte “DBConnect” qui fournit des fonctionnalités de firebase database telles que l’exécution d’instructions SQL, l’exécution de SP, l’exécution de SP ou la requête et le renvoi de SqlDataReader, etc.

J’ai créé une instance de la classe DBConnect dans Session_Start de Global.asax et stockée dans une session. Plus tard, en utilisant une classe statique, je fournis la fonctionnalité de firebase database à travers l’application en utilisant la même session. En bref, je fournis un point unique pour toutes les opérations de firebase database à partir de n’importe quelle page asp.net.

Je sais que je peux écrire mon propre code pour connecter / déconnecter une firebase database et exécuter des SP à partir des méthodes dont j’ai besoin pour passer outre. S’il vous plaît regardez le code ci-dessous –

public class SGI_MembershipProvider : MembershipProvider { 

……

  public override bool ChangePassword(ssortingng username, ssortingng oldPassword, ssortingng newPassword) { if (!ValidateUser(username, oldPassword)) return false; ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(username, newPassword, true); OnValidatingPassword(args); if (args.Cancel) { if (args.FailureInformation != null) { throw args.FailureInformation; } else { throw new Exception("Change password canceled due to new password validation failure."); } } ..... //Database connectivity and code execution to change password. } .... } 

MON PROBLÈME – Ce dont j’ai besoin maintenant, c’est d’exécuter la partie firebase database dans toutes ces méthodes surchargées à partir du même sharepoint firebase database, comme décrit en haut. C’est-à-dire que je dois transmettre l’instance de DBConnect existant dans la session à cette classe, afin que je puisse accéder aux méthodes.

Quelqu’un pourrait-il fournir une solution à ce sujet? Il pourrait y avoir de meilleures techniques que je ne suis pas au courant. L’approche que j’utilise peut être fausse. Vos suggestions sont toujours les bienvenues.

Merci de partager votre temps précieux.

Comprendre le cycle de vie du fournisseur d’adhésion aiderait à clarifier cela.

Une instance du fournisseur d’appartenance est activée au démarrage de l’application et rest active pendant toute la durée de vie de l’ application AppDomain, ce qui correspond en pratique au cycle de vie de l’application. Par exemple, si pour une raison quelconque, AppDomain effectue un cycle, l’application est supprimée et une nouvelle instance est démarrée. Une nouvelle instance du fournisseur d’adhésion enregistré est activée lors de la première utilisation.

Vous devez soit instancier une instance de votre classe d’access aux données dans votre implémentation de fournisseur d’appartenance, soit accéder à des méthodes statiques à partir de votre fournisseur. Je préfère utiliser une instance.

Séparer le fournisseur d’adhésion de son access aux données en créant des singletons ou en le dissimulant dans l’application est un hack à mon avis et ne conduira qu’à la douleur, au chagrin, au sumil perdu et à la crédibilité de vos pairs.

Salut et bonne chance.

Ne gardez pas une instance distincte de la classe DBConnect en session, vous allez créer une classe pour chaque utilisateur! Cela affectera sérieusement l’évolutivité.

Vous pouvez effectuer l’une des opérations suivantes:

  • Placez la classe dans l’état de l’application
  • Utilisez le motif singleton
  • Rend la classe et toutes les méthodes de la classe statiques.

Ma recommandation est d’aller au numéro 3. Vous n’avez généralement pas besoin de créer une instance d’une classe qui effectue des opérations crud de firebase database, par exemple

 public static class DBConnect { public static ChangePassword(ssortingng userId, ssortingng password) { //Implementation here } } 

Ensuite, vous pouvez simplement appeler ce code dans votre fournisseur sans créer d’instance:

 DBConnect.ChangePassword(x,y);