我已经实现了下面的代码,但不知道接口是怎么回事。我有两个项目:Project.Web和Project.Core。有人可以帮我理解接口在这里工作吗?
在Project.Web,我有它实现了DataSource接口的基础设施的命名空间:现在
namespace Project.Web.Infrastructure
{
public class ProjectDataSource : DbContext, IProjectDataSource
{
public ProjectDataSource() : base("DefaultConnection") // 1) What is this constructor doing?
{
}
public DbSet<Set> Sets { get; set; }
public DbSet<Card> Cards { get; set; }
void IProjectDataSource.Save() // 2) This method isn't even defined in the interface, what value does it provide?
{
SaveChanges();
}
IQueryable<Card> IProjectDataSource.Cards // 3) This gets me a list of Cards, but from where?
{
get { return Cards; }
}
IQueryable<Set> IProjectDataSource.Sets
{
get { return Sets; }
}
}
}
,在Project.Core我有IProjectDataSource,接口:
namespace Project.Core
{
public interface IProjectDataSource
{
IQueryable<Card> Cards { get; }
IQueryable<Set> Sets { get; }
IQueryable<Side> Sides { get; }
void Save();
}
}
中的Web项目控制器,我有这样的代码:
namespace Project.Web.Controllers
{
public class SetController : Controller
{
private readonly ProjectDataSource _db;
public SetController(ProjectDataSource db)
{
_db = db;
}
问题1-3 ar在代码中,我的最后一个问题是4)最后一块代码究竟发生了什么?为什么具有SetController的构造函数会使代码更少耦合?
任何具有明确示例的指针都会有所帮助 - 我一直在努力地理解接口,所以我可以开始在我的MVC应用程序中实现服务层,但我挣扎了一下。非常感谢。