private static void TestAbstractFactory() { IDbFactory factory = new AccessFactory(); var userRepo = factory.CreateUserRepo(); var deRepo = factory.CreateDepartmentRepo(); deRepo.CreateDepartment(null); userRepo.Insert(null); factory = new SqlServerFactory(); userRepo = factory.CreateUserRepo(); userRepo.Insert(null); #region AbstractFactory + Reflection var departmentRepo = DataAccess.CreateDepartmentRepo(); departmentRepo.CreateDepartment(null); #endregion AbstractFactory + Reflection #region AbstractFactory + DependencyInjection var builder = new ContainerBuilder(); builder.RegisterType <SqlServerFactory>().As <IDbFactory>(); var container = builder.Build(); var dbFactory = container.Resolve <IDbFactory>(); dbFactory.CreateDepartmentRepo().CreateDepartment(null); #endregion AbstractFactory + DependencyInjection }