J'ai une ProjectName.Core
bibliothèque contenant toute ma logique métier et mes entités et leur comportement. Il n'y a actuellement aucune relation avec Entity Framework ou tout autre DAL parce que j'aime garder ces choses séparées. Les configurations Entity Framework (à l'aide de l'API Fluent) résident dans un ProjectName.Infrastructure
projet afin de prendre soin de pousser mes entités dans EF. Fondamentalement, je vais dans le sens d'une architecture de type oignon.
Cependant, lors de l'ajout du cadre d'identité ASP.NET dans le mélange, je dois faire ApplicationUser
hériter mon entité de la IdentityUser
classe, mais ma ApplicationUser
classe a des relations avec d'autres entités. En héritant de IdentityUser
j'introduis une référence à Entity Framework dans mon projet d'entités, le seul endroit où je ne voudrais pas le faire. Le ApplicationUser
retrait de la classe du projet d'entités et dans le Infrastructure
projet (car il utilise un système d'identité basé sur Entity Framework) entraînera des références circulaires, ce n'est donc pas la voie à suivre non plus.
Existe-t-il un moyen de contourner cela afin que je puisse garder la séparation nette entre les deux couches en plus de ne pas utiliser ASP.NET Identity?
la source
Réponses:
Vous pouvez créer une classe d' utilisateurs qui n'a rien à voir avec l'identité ASP.NET dans votre bibliothèque principale.
Si vous utilisez Entity Framework, créez une classe de configuration pour vos entités (facultatif).
Vous devez également créer des classes pour Role, UserClaim et UserLogin . Vous pouvez les nommer comme vous le souhaitez si vous n'aimez pas les noms ci-dessus.
Dans la couche Web, créez une classe appelée AppUser (ou un autre nom si vous le souhaitez). Cette classe doit implémenter l' interface ASP.NET Identity IUser <TKey> , où TKey est le type de données pour la clé primaire ( Guid dans l'exemple ci-dessus).
Remplacez toutes les références à UserManager dans le projet Web par UserManager <AppUser, Guid> .
Enfin, créez votre propre UserStore . Essentiellement, le UserStore personnalisé prendra l' objet AppUser , le convertira en objet d'entité User , puis le conservera. Un exemple de l'une de ces méthodes est présenté ci-dessous:
Pour obtenir une description complète d'une implémentation possible, cliquez ici .
En fin de compte, c'est votre choix. Mesurez la quantité d'efforts qu'il vous faudrait pour maintenir cette implémentation au lieu de simplement référencer le cadre d'identité dans votre bibliothèque principale. Personnellement, j'ai pensé à le faire comme je l'ai décrit ci-dessus, mais je ne l'ai pas fait car je devrais potentiellement changer mon code chaque fois que le framework d'identité ASP.NET est mis à jour.
J'espère que cela aide et répond à votre question!
la source