我已经实现了以下代码,但不知道接口发生了什么。我有两个项目: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 在代码中,我的最后一个问题是 4) 最后一段代码到底发生了什么?为什么拥有 SetController 的构造函数会使代码耦合度降低?
任何带有清晰示例的指针都会有所帮助——我一直在努力理解接口,因此我可以开始在我的 MVC 应用程序中实现服务层,但我有点挣扎。非常感谢。