Pergunta

Estou usando o ASP.NET Identity com um novo site e não parece haver muitos (algum?) exemplos de como fazer isso de maneira dissociada.Não quero o modelo do meu domínio DomainUser classe para ter que herdar Microsoft.AspNet.Identity.EntityFramework.User, então criei uma classe parecida com esta:

public class IdentityUser : User
{
    public virtual DomainUser DomainUser { get; private set; }
}

Eu mudei o DbSets exigidos pelo ASP.NET Identity no mesmo derivado DbContext class como meus modelos de domínio conforme ilustrado nesta resposta.Eu vinculei o IdentityUser unidirecionalmente para o DomainUser via API Fluent assim:

modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();

Isso me permite separar principalmente as preocupações de autorização e autenticação dos comportamentos definidos no DomainUser aula.Isso é melhor do que combiná-los em uma classe, mas ainda parece feio.Ainda tenho referências aos assemblies de identidade ASP.NET necessários em meu projeto de domínio.Eu poderia criar outro projeto que contivesse apenas minha classe IdentityUser e uma referência ao meu assembly Domain para permitir a propriedade de navegação, mas isso começa a parecer complicado.

Eu sinto que deveria haver uma maneira melhor, mais limpa e mais modular de vincular a identidade ao domínio sem que isso resultasse em um acoplamento forte.

Alguém descobriu uma maneira melhor de lidar com isso?Espero chamar a atenção dos envolvidos no projeto ASP.NET Identity (Hao Kung et al) para fornecer orientação aqui.

Foi útil?

Solução 2

O fato é que se você for herdar do IdentityUser, os assemblies relacionados ao ASP.NET Identity virão junto.Você não pode separar a identidade do ASP.NET.Os exemplos originais da pergunta não compram muito - na maioria dos casos, é melhor você apenas herdar de IdentityUser se você for usar IdentityUser em seu projeto de domínio.

Se o seu projeto de domínio realmente precisa estar livre de assemblies relacionados ao ASP.NET, você pode deixar as classes relacionadas à identidade no seu projeto da web e criar um separado User modelo em seu projeto de domínio e vincule os dois programaticamente, conforme sugerido aqui.

Outras dicas

Existe um discussão sobre desacoplamento da identidade do ASP.NET aqui.E você pode encontrar exemplos de como isso foi implementado no projeto de código aberto SimpleSecurity.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top