下面我们来看第二层:Data   这一层相对来说是对Core层的具体实现了.

从命名可以看出来,这和数据库相关.

1.Db.cs

CodeFirst模式的本地数据库类,继承了DbContext.

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Dinner>().HasMany(r => r.Meals).WithMany(o => o.Dinners).Map(f =>
{
f.MapLeftKey("DinnerId");
f.MapRightKey("MealId");
}); modelBuilder.Entity<User>().HasMany(r => r.Roles).WithMany(o => o.Users).Map(f =>
{
f.MapLeftKey("UserId");
f.MapRightKey("RoleId");
}); base.OnModelCreating(modelBuilder);
}

这个重写方法的用处就是,建立表的映射关系和外键引用关系.

2.DbContextFactory.cs

 public class DbContextFactory : IDbContextFactory
{
private readonly DbContext dbContext;
public DbContextFactory()
{
dbContext = new Db();
} public DbContext GetContext()
{
return dbContext;
}
} public interface IDbContextFactory
{
DbContext GetContext();
}

在使用EF框架的时候,DbContext实例化必须要保持唯一性,针对于应用程序多层设计,在技术每一层或多个方法调用的时候, 我们使用的这个数据实体上下文必须要唯一。

所以这里使用的是静态的变量和静态只读的构造函数保持唯一.

3.DelRepo.cs

4.Repo.cs

5.UniRepo.cs

三个类通过List<T>具体实现了Core层的三个抽象接口类,T就是在具体使用的时候运用的类型了.

下面我们来看第三层:Infra  这层为实现抽象层和后续的业务实现层建立了桥梁

ProDinner使用了Castle.Windsor开源项目,最直接最根本的使用了依赖倒转,说得通俗点,就是不用new任何对象, 接口调用接口来实现具体操作.Infra层其实就是运用了Castle的这种特定的方式实现了依赖倒转。

public static class IoC
{
private static readonly IWindsorContainer TheContainer = new WindsorContainer();  //声明一个唯一的依赖倒转容器 public static IWindsorContainer Container
{
get { return TheContainer; }
} public static T Resolve<T>()
{
return TheContainer.Resolve<T>();
} public static object Resolve(Type type)  //Resolve就是为实现不同的类型容器的接口
{
return TheContainer.Resolve(type);
}
}

最新文章

  1. MYSQL C API : struct MYSQL_STMT 结构的组合使用
  2. android ContentResolver详解
  3. 文件I/O之fcntl函数
  4. iOS中的NSLog的输出格式
  5. 【web安全】第四弹:防火墙技术笔记
  6. UVA 1839 Alignment
  7. 雕爷牛腩这样判断零售未来-搜狐IT
  8. 使用CUNIT测试
  9. mysql 5.5 mysqldump备份原理
  10. OpenResty知识汇集
  11. vuejs配置less
  12. Spring源码学习:第2步--使用SLF4j+Log4j日志框架替换掉其自身的commons-logging日志框架
  13. zabbix 修改为UTC 时区的配置
  14. 18、实现strStr()
  15. 一个suse11 sp1的crash工具版本问题
  16. JavaScript高级编程(1)——JavaScript初识
  17. Python学习手记
  18. Java中Super和final关键字以及异常类
  19. C++树的插入和遍历(关于指针的指针,指针的引用的思考)
  20. 在windows10上安装caffe和tensorflow

热门文章

  1. 黄聪:wordpress中remove_action、add_action、 do_action()的hook钩子都有哪些
  2. solace
  3. SecureCRT自动记录日志【记录键入的所有命令和打印的结果信息】
  4. 关于 ProcessEngines.getDefaultProcessEngine();NullPointException问题
  5. DG_Oracle DataGuard Failover主备节点切换(案例)
  6. CMake使用教程
  7. dede的幻灯片除了首页其他页面也显示的方法,
  8. GC学习笔记
  9. Note++ 的快捷
  10. websphere应用程序的使用