/// <summary> /// Register all the interfaces that implement ICrudRepository in assemblies, /// each instance of stub Repository for each IOC /// </summary> /// <param name="services"></param> /// <param name="dbContextCreator">delegate to create an instance of DbSet</param> /// <param name="assemblies">assemblies that contain Repository Interfaces</param> /// <returns></returns> public static IServiceCollection AddTransientRepositories(this IServiceCollection services, Func <DbContext> dbContextCreator, params Assembly[] assemblies) { RepositoryStubGenerator repositoryStubGenerator = new RepositoryStubGenerator(); foreach (var repType in assemblies.SelectMany(t => t.GetTypes()) .Where(t => HasImplementedRawGeneric(t, typeof(ICrudRepository <,>)))) { services.AddTransient(repType, sp => { MethodInfo methodGenericCreate = GetCreateMethod(repType); var dbCtx = dbContextCreator(); return(methodGenericCreate.Invoke(repositoryStubGenerator, new object[] { dbCtx })); }); } return(services); }
static void Main(string[] args) { using (YZDbContext ctx = new YZDbContext("Data Source=.;Initial Catalog=TestDB1;Integrated Security=False;User ID=sa;Password=abc@123;")) { /* * ctx.Add(new Book { AuthorId=2,Name="Java1",Price=56.2,PublishDate=DateTime.Now}); * ctx.SaveChanges();*/ /* * foreach(var b in ctx.Books.Include(b=>b.Author)) * { * Console.WriteLine(b); * }*/ RepositoryStubGenerator gen = new RepositoryStubGenerator(() => ctx); var rep = gen.Create <Book, long, IBookRepository>(); //var rep = new BaseEFCrudRepository<Book, long>(() => ctx); //var books = rep.Find("Name.Contains(\"m\")"); //var books = rep.Find("!(Id in @0)",new long[] { 3,5}); //var books = rep.FindByPriceOrName(33, "1Learn C"); //var books = rep.FindFoo(2, "5C1", Order.Asc("Price")); //var books = rep.FindFooOrderByPrice(33, "a", new Order[] { Order.Desc("Price"), Order.Asc("PublishDate") }); //var books = rep.FindByPrice(33); //var books = rep.FindByPriceIsNull(); //var books = rep.FindByPriceAndName(33, "1Learn C"); //var books = rep.FindByPriceOrNameOrderByPrice(33, "1Learn C"); //todo:test Paging and single return value //todo: support deleteByName,deleteByNameOrAge,DeleteByNameLike //var books = rep.FindOrderByPublishDate(); /* * var books = rep.FindOrderByPublishDate(new PageRequest {PageNumber=0,PageSize=3,Orders=new Order[] { Order.Asc("Price")} }); * Console.WriteLine(books.PageNumber); * Console.WriteLine(books.PageSize); * Console.WriteLine(books.TotalElements); * Console.WriteLine(books.TotalPages); * foreach (var b in books.Content) */ //var books = rep.FindByPriceAndNameOrderByPublishDate(33, "2JavaEE Overall"); var books = rep.FindByPriceOrName(99, "3About Microsoft", Order.Asc("Price")); foreach (var b in books) { Console.WriteLine(b); } Console.WriteLine("ok"); gen = new RepositoryStubGenerator(() => ctx); var b1 = rep.FindByName(".net core"); Console.WriteLine(b1); /* * var books = rep.FindFoo(1, "3About Microsoft", Order.Asc("Priace")); * foreach(var b in books) * { * Console.WriteLine(b); * } */ /* * PageRequest pageReq = new PageRequest { PageNumber = 1, PageSize = 3, * Sort = new Sort(Order.Desc("Price")) }; * PageRequest pageReq = new PageRequest * { * PageNumber = 1, * PageSize = 3 * }; * var page = rep.Find(pageReq, "Price>5"); * * foreach (var b in page.Content) * { * Console.WriteLine(b); * } * * Console.WriteLine(page.TotalElements); * Console.WriteLine(page.PageNumber); * Console.WriteLine(page.PageSize); * Console.WriteLine(page.TotalPages);*/ } Console.Read(); }