码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET MVC 开源项目学习之ProDinner (二)

时间:2015-11-24 00:54:21      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

下面我们来看第二层: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);
        }
    }

 

 

ASP.NET MVC 开源项目学习之ProDinner (二)

标签:

原文地址:http://www.cnblogs.com/miaoying/p/4990055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!