Eu tenho uma ProjectName.Core
biblioteca contendo toda a minha lógica de negócios, minhas entidades e seu comportamento. Atualmente, não há nenhuma relação com o Entity Framework ou qualquer outro DAL, porque eu gosto de manter essas coisas separadas. As configurações do Entity Framework (usando a API Fluent) residem em um ProjectName.Infrastructure
projeto, de modo a cuidar de colocar minhas entidades no EF. Basicamente, eu estou indo na direção de uma arquitetura semelhante à cebola.
No entanto, ao adicionar a estrutura de identidade do ASP.NET ao mix, preciso ApplicationUser
herdar minha entidade da IdentityUser
classe, mas minha ApplicationUser
classe tem relações com outras entidades. Ao herdar IdentityUser
, estou introduzindo uma referência ao Entity Framework em meu projeto de entidades, o único lugar em que eu não gostaria de fazê-lo. Puxar a ApplicationUser
classe para fora do projeto de entidades e entrar no Infrastructure
projeto (já que ele está usando um sistema de identidade baseado em Entity Framework) resultará em referências circulares, de modo que também não é o caminho a seguir.
Existe alguma maneira de contornar isso para que eu possa manter a separação limpa entre as duas camadas, além de não usar a identidade do ASP.NET?
fonte
Respostas:
Você pode criar uma classe de usuário que não tem nada a ver com a identidade do ASP.NET na sua biblioteca principal.
Se você estiver usando o Entity Framework, crie uma classe de configuração para suas entidades (opcional).
Você também deve criar classes para Role, UserClaim e UserLogin . Você pode nomeá-los como quiser, se não gostar dos nomes acima.
Na camada da web, crie uma classe chamada AppUser (ou outro nome, se você escolher). Essa classe deve implementar a interface ASP.NET Identity IUser <TKey> , em que TKey é o tipo de dados da chave primária ( Guid no exemplo acima).
Altere todas as referências ao UserManager no projeto da web para UserManager <AppUser, Guid> .
Por fim, crie sua própria UserStore . Essencialmente, o UserStore personalizado recebe o objeto AppUser , converte-o em um objeto de entidade Usuário e depois o mantém . Um exemplo de um desses métodos é mostrado abaixo:
Para obter uma descrição completa de uma possível implementação, clique aqui .
No final, a escolha é sua. Avalie a quantidade de esforço necessário para manter essa implementação, em vez de apenas referenciar a estrutura de Identidade na sua biblioteca Core. Pessoalmente, pensei em fazê-lo da maneira que descrevi acima, porém não o fiz, porque provavelmente teria que alterar meu código toda vez que a estrutura de identidade do ASP.NET for atualizada.
Espero que isso ajude e responda à sua pergunta!
fonte