如何在MVC应用程序中使用通用存储库和UOW模式使用ASP身份



我正在使用MVC应用程序中的通用存储库和UOW模式。它可以满足我的要求。但是,我发现由于ASP身份与MVC的紧密耦合,将ASP身份与这些模式集成在一起非常困难。我的代码如下:

// 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);
        }
}

有人可以为我提供有关如何将ASP身份集成到上述结构的指针。

预先感谢。

简短答案 - 您不这样做。

长答案:默认模板为您提供了一个工作解决方案,其所有位都很好地工作。为什么要麻烦将工作解决方案纳入您的体系结构,尤其是您意识到自己的体系结构不符合通过身份解决的问题。

存储库和UOW模式很好,但不适合身份。身份涉及身份验证,饼干,角色,权限。存储库是关于持续存在的数据,关于交易。这些事情彼此不合适。因此,不要试图将圆形钉放入方孔中。

相关内容

  • 没有找到相关文章

最新更新