0

J'utilise le Référentiel générique et les modèles UOW dans mon application MVC. Cela fonctionne bien pour mes besoins. Cependant, je trouve qu'il est très difficile d'intégrer l'identité ASP avec ces modèles en raison du couplage étroit de l'identité ASP avec MVC. Mon code est le suivant:Comment utiliser l'identité ASP avec le référentiel générique et les modèles UOW dans l'application MVC

// Repository Interface 
public interface IRepository<TEntity> where TEntity : class 
{ 
     TEntity Get(int id); 
     IEnumerable<TEntity> GetAll(); 
     IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate); 
     void Add(TEntity entity);   
     void Remove(TEntity entity); 
} 

// Repository class 
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class 
{ 
     // db context defined 
     // IRepository implementation 
} 

// Domain Class 
public class Author 
{ 
     public int AuthorId { get; set; } 
     public string Name { get; set; } 
} 

// DbContext class 
public class AppContext : DbContext 
{ 
     public AppContext() : base("name=MyContext") {} 
     public virtual DbSet<Author> Authors { get; set; } 
} 

// Domain Interface 
public interface IAuthorRepository : IRepository<Author> 
{ // implement custom methods } 

// Concrete class implementation 
public class AuthorRepository : Repository<Author>, IAuthorRepository 
{ 
     public AuthorRepository(AppContext context) : base(context) 
     {} 

     public AppContext AppContext 
     { 
      get { return Context as AppContext; } 
     } 
} 

// UnitOfWork interface 
public interface IUnitOfWork : IDisposable 
{ 
     IAuthorRepository Authors { get; } 
     int Complete(); 
} 

// Unit of work class 
public class UnitOfWork : IUnitOfWork 
{ 
    private AppContext context; 

     public UnitOfWork(AppContext context) 
     { 
      this.context = context; 
      Authors = new AuthorRepository(context); 
     } 

     public IAuthorRepository Authors { get; set; } 

     public int Complete() 
     { 
      return context.SaveChanges(); 
     } 

     // dispose context 
} 

public class HomeController : Controller 
{ 
     private readonly IUnitOfWork uow; 

     public HomeController(IUnitOfWork uow) // using Dependency Injection 
     { 
      this.uow = uow; 
     } 

     public ActionResult Index() 
     { 
      var authors = uow.Authors.GetAll(); 
      return View(authors); 
     } 
} 

que quelqu'un peut me fournir des indications sur comment puis-je intégrer ASP identité avec la structure ci-dessus.

Merci d'avance.

+0

Copie possible de [Identité ASP.NET avec référentiel et unité de travail] (https://stackoverflow.com/questions/23226140/asp-net-identity-with-repository-and-unit-of-work) –

Répondre

0

Réponse courte - vous ne faites pas cela. Réponse longue: le modèle par défaut vous donne une solution de travail avec tous les bits qui fonctionnent bien ensemble. Pourquoi prendre la peine d'utiliser une solution de travail dans votre architecture, surtout si vous réalisez que votre architecture ne correspond pas au problème résolu par Identity. Les modèles de référentiel et de configuration sont bons, mais ne sont pas destinés à l'identité. L'identité traite de l'authentification, des cookies, des rôles, des permissions. Le référentiel concerne les données persistantes, à propos de la transaction. Ces choses ne s'accordent pas. N'essayez donc pas de placer une cheville ronde dans un trou carré.

+0

trailmax, alors comment intégrer Identity avec mon application. Dans ma structure, le DbContext n'est accessible que via le Repository mais l'Identity est étroitement lié à DbContext. La seule solution consiste à déplacer le code d'identité vers son propre référentiel. – Tech

+0

Vous utilisez DI, non? Eh bien, injectez 'DbContext' dans' IUserStore' - c'est le seul endroit où il est nécessaire (surtout) et le reste de Identity fonctionne avec 'ApplicationUserManager' et' ApplicationRoleManager' (si vous l'avez). – trailmax